2017-08-16 45 views
0

我沒有看到任何鏈接使用select元素的表單和通過ajax獲得的選項的示例。我想通過ajax初始化視圖模型屬性,以填充我的視圖和數據中的一些選擇列表 - 從我的模型數據中鏈接選定的ID。編譯視圖模型的.unmap()時,我不需要這些數組,因爲我不想在更新模型時將大列表發送回服務器。所以,假設我有ProjectID,ProjectDescription,ProjectTypeID,ProjectPriorityID的數據。在我的視圖模型中,我需要通過ajax獲取ProjectTypes和ProjectPriorities的列表,並在我的視圖中使用它們,以便我可以從列表中選擇值。我不確定如何在做.unmap()將數據列表作爲數據的一部分來將其發送回服務器時如何實現此目的。選擇通過ajax獲得的選項並取消映射問題

如果在我的視圖模型中存在「ProjectTypes」或「ProjectPriorites」屬性,則在調用.unmap()時,它們總是成爲數據的一部分。

謝謝

+0

我的答覆是否適合您?如果是這樣,你能把它標記爲已接受嗎?謝謝... – BorisMoore

回答

1

有不同的替代方法。一種是擁有一個包含「二次數據」的單一模型 - 比如所有的ProjectTypes - 不會動態變化,以及可以根據用戶輸入更新的「主要數據」。在這種情況下,當您使用unmap()從VM層次結構中返回純JSON數據時,您可以「修剪」它並僅將相關的「主要」部分發送回服務器。

另一種方法是保持主要和次要數據分離 - 這樣的模型僅僅是「主要」數據,並且將輔助數據是獨立的 - 例如,通過在作爲輔助:

// Instantiate View Models 
var appVm = $.views.viewModels.MyModel.map(modelData); 
var typesVm = $.views.viewModels.MyTypes.map(typeData); 

$.templates("#appTemplate").link("#page", appVm, {types: typesVm});

<select data-link="typeId()">< 
    {^{for ~types.projectTypes()}} 
    <option value="{{:id()}}">{{:label()}}</option> 
    {{/for}} 
</select> 

您也可以選擇不編譯視圖模型爲輔助數據,如果它基本上是「靜態」,然後執行:

$.templates("#appTemplate").link("#page", appVm, {types: typesData});

<select data-link="typeId()">< 
    {^{for ~types.projectTypes}} 
    <option value="{{:id}}">{{:label}}</option> 
    {{/for}} 
</select> 

另一種方法是僅使用CRUD/REST web服務方法服務器更新發送回服務器實際變化的任何數據值或陣列,例如。在這種情況下,您需要有能夠區分數據的代碼,或者使用觀察或觀察所有來響應增量更改...