2012-02-20 77 views
4

目前我有我的應用程序的「新項目形式」。我使用了mustacheJS作爲它的模板。有一些需要數據庫數據的字段,通過ajax發送。比如說,某個選擇框。在鬍子中填充和選擇一個選擇框JS

<select name="customerOrder"> 
    {{#order}} <option value="{{id}}">{{itemName}}</option> {{/order}} 
</select> 

數據與項目,以填補這件事是這樣的:

{ 
    "order": [ 
     { 
      "id":1, 
      "itemName":"Meat Lover's Pizza" 
     }, //and so on... 
    ] 
} 

正常工作,直到我將要創建的編輯形式,其中,除了表格數據來填充選擇框和複選框,我現在必須將表單元素標記爲選中狀態。然而...

項目數據是在另一個Ajax調用上檢索的,因此是另一個JSON對象。我不一定會合並,因爲數據可能具有不同的結構。我本可以嘗試this approach,但這意味着表單數據和項目數據將是「一個」 - 我不希望這樣。我想有形數據的清晰分離,無實際數據

項目數據看起來像這樣基本的,但也可以在JSON對象某處嵌套:

{ 
    "customer":"mario", 
    "order": 1   --> this item i want selected in the form 
    //and so on... 
} 

,如果有隻有一些建立表單的方法,然後在使用小鬍子JS的同時無縫地填充和標記。我不想用相應的表單字段來硬編碼數據。

我聽說過運行時渲染和偏移,但我似乎無法看到我將如何使用它們。

回答

2

我想通了!我從鬍鬚中使用「倒置部分」得到了這個想法。

我上面做的那個看起來像是死路一條,或者如果我追求它,我會讓所有事情變得複雜。

我所做的是:

  1. ,而不必阿賈克斯送過來的值<option>和有一個模板在<select>填充它們,我有我的模板建立在服務器端,並填補了<select>數據的選項。另外,我將模板用作所選項目的「標記」。

  2. 通過ajax獲取的唯一東西將是項目數據。我改變了JSON對象的結構以適合構建的模板。相反交出的數據,而不是我,交給了 「標誌」

最終結果是:

//build from the server-side ready with options, and with "markers 

<select name="customerOrder"> 
    <option value="1" {{#order}}{{#i1}}selected="selected"{{/i1}}{{/order}}>Meat Lover's Pizza</option> 
    <option value="2" {{#order}}{{#i2}}selected="selected"{{/i2}}{{/order}}>Supreme</option> 
</select> 

//JSON "edit-mode" data 

{ 
    "order": { 
     "i2":true // this will render the "selected" attribute on the one with "i2" 
    }    // refer to "non-empty" list and "inverted sections" 
}     // http://mustache.github.com/mustache.5.html