Ошибка Spine JS при рендеринге .eco шаблона с использованием Hem: «Невозможно прочитать свойство« длина »из неопределенного» - PullRequest
2 голосов
/ 29 января 2012

Изучение spine.js Я выполнил оба урока без проблем, кажется, это отличная структура, но эта простая маленькая проблема сводит меня с ума, потому что я понятия не имею, что я могу сделать, чтобы это исправить ...

Насколько я понимаю, переменная @list должна быть доступна шаблону .eco (скомпилированным hem), но это не так, кто-нибудь еще сталкивался с этим?

Может кто-нибудь показать мне, где я иду не так?

Users.coffee

Spine = require('spine')
User  = require('models/user')
$     = Spine.$

class Show extends Spine.Controller
  className: 'UserApp'

  events:
    'click .NewUser' : 'new'

  constructor: ->
    super    
    User.bind('create refresh change', @render)
    @active @render

  render: =>
    #get all users and render list
    @list= [1,2,3,4,5]
    console.log(@list)
    @html require('views/UserApp')(@list)

  new: ->
    @navigate('/users','create')

UserApp.eco

 <% if @list.length: %>
     <% for i in @list: %>
      <%= i %>
     <% end %>
    <% else: %>
     Why you no work!?
    <% end %>

Ответы [ 2 ]

5 голосов
/ 29 января 2012
@html require('views/UserApp')()

ожидает хеш-объект в качестве параметра.Итак, если вы хотите использовать переменную @list в своем представлении (я имею в виду ala Rails), вы должны сделать что-то вроде следующего:

@html require('views/UserApp')(list: @list)

где ключом будет имя вашей переменной ввид.Поэтому, используя:

@html require('views/UserApp')(@list)

, как вы делаете, вы увидите переменную @list в качестве текущей @ или this, и, по вашему мнению, вы сможете использовать ее вследующим образом:

<% if @.length: %>
     <% for i in @: %>
      <%= i %>
     <% end %>
<% else: %>
     Why you no work!?
<% end %>

Но это не так хорошо читается.

3 голосов
/ 29 января 2012

Я думаю, что шаблон ожидает получения объекта. Затем вы получаете доступ к свойству этого объекта с помощью @key_name;

Попробуйте что-то вроде этого (Отказ от ответственности: я не знаю Coffeescript)

render: =>
    #get all users and render list
    @item = {}
    @item.list = [1,2,3,4,5]
    @html require('views/UserApp')(@item)
...