2013-05-27 62 views
0

在Ember.js我有這樣的模式:Ember.js 「每一個」 麻煩

App.Product = DS.Model.extend({ 
    name: DS.attr("string"), 
    ean: DS.attr("number"), 
    price: DS.attr("number"), 
    units: DS.attr("number"), 
    product_states: DS.hasMany('App.ProductState') 
}); 

App.ProductState = DS.Model.extend({ 
    price: DS.attr("number"), 
    units: DS.attr("number"), 
    product_id: DS.belongsTo('App.Product'), 
    user_id: DS.belongsTo('App.User'), 
    created: DS.attr("date") 
}); 

而且我有這樣每個:

 {{#if view.product}} 
      {{#each item in App.ProductState.find({ product_id: view.product.id})}} 
       <tr> 
        <td>{{view.product.name}}</td> 
        <td>{{item.price}}</td> 
        <td>{{item.units}}</td> 
        <td>{{item.created}}</td> 
       </tr> 
      {{/each}} 
     {{/if}} 

這給了我這個錯誤(鉻):

Uncaught Error: Parse error on line 6: 
...in App.ProductState.find({ product_id: v 
-----------------------^ 
Expecting 'ID', got 'INVALID' 

我在加載頁面時出現此錯誤。在加載時,view.product設置爲NULL。每個都在jQuery UI對話框中,其內容是通過按鈕view.set("product",product);動態設置的。

設置產品對象的工作原理是因爲當我想在對話窗口中打印出一個產品變量時,它工作得很好,但是當我使用它們時,它會崩潰。

在我看來,Ember忽略了if條件並試圖通過每個給出錯誤的循環。其他選擇是,我只是使用find方法錯誤(btw。Ember指南告訴你如何設置模型關係,但據我所知,沒有提到他們有什麼效果以及如何正確使用它們)。

是否可以解決該問題?也許像運行javascript函數而不是模板或其他東西?

+0

使用該框架,您應該將數據加載到Controller中,然後使用View顯示它。 – harn145

+0

我很抱歉,但這太籠統了。 – Ragnar

+0

當然,但也是Ember.js框架的核心。沒有更多的代碼細節,這是我能做的最好的。例如: 你使用路由嗎?如果是這樣,你是否設置了相關路線的模型? 如果不是,您的應用程序視圖如何定義?你還展示了什麼其他元素,以及如何? 其實質是視圖以控制器爲基礎,並且控制器的「內容」具有一個或多個記錄(模型實例),基於您用來填充它的查找類型或您實例的方式(所以無論是一個ObjectController或一個ArrayController)。 – harn145

回答

2

你不能把JavaScript放到句柄模板(視圖)中。如果你需要使用直線上升javascript代碼做一些特別介紹的處理,那麼你應該使用被這裏介紹車把助手:http://emberjs.com/guides/templates/writing-helpers/

在您的具體的例子,因爲product_statesProduct屬性你可以訪問product_states屬性和ember/ember數據將在請求時加載數據,然後更新數據何時從服務器返回。

{{#if view.product}} 
    {{#each item product.product_states)}} 
     <tr> 
      <td>{{view.product.name}}</td> 
      <td>{{item.price}}</td> 
      <td>{{item.units}}</td> 
      <td>{{item.created}}</td> 
     </tr> 
    {{/each}} 
{{/if}} 

注意在ember中的約定是有屬性camelCased。所以你的Product模型應該有一個productStates屬性,你的ProdcutState模型應該有一個userId屬性。不知道這是否會搞亂你的json服務器的實現。

希望這會有所幫助。

+0

謝謝你的偉大的洞察力,但解決方案仍然無法正常工作,但我仍然得到同樣的錯誤:未捕獲的錯誤:解析第6行的錯誤: ...在視圖產品。product_states)}} -----------------------^ 期待'ID',得到'INVALID' – Ragnar

+0

也許我應該重複一次,在加載時該頁面並觸發此錯誤view.product爲NULL,因爲直到用戶單擊按鈕時我才知道正確的對象。 – Ragnar