2012-01-24 53 views
2

我使用spine.js和Spine.Ajax模塊一起通過​​JSON從服務器加載內容。我可能遇到了一些同步問題。我剛剛結合的刷新和改變事件,然後一個側欄呈現:spine.js:「未知未知記錄」

Survey.bind 'refresh change', @render 

我也寫了一些路線,當用戶通過#/調查/訪問它其中一個調查:ID。這是我的控制器:

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控制器(它是由一種叫做App.SurveyStackSpine.Stack叫):

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

您的診斷正確無誤,因爲在從服務器獲取項目之前無法找到項目。

最簡單的辦法是綁定一個事件Survey.fetch()調用像這樣:

Survey.bind 'refresh change', @method_to_call 

讓我知道這是否有助於!

2

實際上,對我而言,解決方案是在對象刷新後初始化Spine.Route.setup()。而不是app/index.js.coffee中的標準調用,它應該是:

App.Survey.one 'refresh', -> 
    Spine.Route.setup() 
+0

您是否曾經發現Spine以這種方式表現的原因?我有一個類似的問題 - 巧合的是在一個調查應用程序:P – Fabdrol