spine.js: «Неизвестная неизвестная запись» - PullRequest
2 голосов
/ 24 января 2012

Я использую spine.js вместе с модулем Spine.Ajax для загрузки материалов через JSON с сервера.Я, вероятно, столкнулся с некоторой проблемой синхронизации.У меня есть боковая панель, которая просто привязывается к событиям обновления и изменения, а затем отображается:

Survey.bind 'refresh change', @render

Я также настроил некоторые маршруты, которые отображают опрос, когда пользователь обращается к нему через # / survey /:Я бы.Это мой контроллер:

class App.Surveys extends Spine.Controller
  className: 'surveys'

  constructor: ->
    super

    @append(@sidebar = new App.Sidebar)       # Sidebar to select surveys
    @append(@surveys = new App.SurveysStack)  # Show survey details survey

    @routes
     '/surveys/:id': (params) ->
       @sidebar.active(params)
       @surveys.show.active(params)

    Survey.fetch()

Как видите, Survey.fetch() вызывается после инициализации, что не создает проблем для боковой панели.Однако, похоже, что это создает проблемы для контроллера опросов Show (который вызывается Spine.Stack называемым App.SurveyStack):

class Show extends Spine.Controller
  constructor: ->
    super
    @active @change

  change: (params) =>
    # There is a bug! If Survey is not fetched when we run this,
    # this throws an error.
    @item = Survey.find(params.id)
    @render()

  render: ->
    @html @view("surveys/show")(@item)

Я продолжаю получать ошибки от закомментированной частиИсточник: Uncaught Unknown record.Могу ли я сделать функциональный блок Survey.find() до тех пор, пока Survey.fetch() не будет завершен?

Ответы [ 2 ]

2 голосов
/ 03 октября 2012

На самом деле решение, которое сработало для меня, заключается в инициализации Spine.Route.setup () после обновления объекта.Вместо стандартного вызова в app / index.js.coffee это будет:

App.Survey.one 'refresh', ->
  Spine.Route.setup()
2 голосов
/ 25 января 2012

Вы правы в своем диагнозе, что вы не можете найти элемент до того, как получите его с сервера.

Самое простое решение - привязать событие к вызову Survey.fetch (), какитак:

Survey.bind 'refresh change', @method_to_call

Дайте мне знать, если это поможет!

...