我没有看到任何使用select元素与通过ajax获得的选项链接表单的示例。我想通过ajax初始化一个视图模型属性,以便在我的视图中填充一些选择列表,并从我的模型数据中链接所选的id。在执行编译视图模型的.unmap()时,我不需要这些数组,因为我不想在更新模型时将大型列表发送回服务器。所以,假设我有ProjectID,ProjectDescription,ProjectTypeID,ProjectPriorityID的数据。在我的视图模型中,我需要通过ajax获取ProjectTypes和ProjectPriorities的列表,并在我的视图中使用它们,以便我可以从列表中选择值。我不确定如何在执行.unmap()将列表作为数据的一部分时将其作为数据的一部分发送回服务器。
如果我的视图模型中存在“ProjectTypes”或“ProjectPriorites”的属性,则在调用.unmap()时它们始终会成为数据的一部分。
谢谢
答案 0 :(得分:1)
有不同的替代方法。一种是拥有一个包含二级数据的单一模型' - 例如所有项目类型 - 它们不会动态变化,以及“主要数据”和#39;可以根据用户输入进行更新。在这种情况下,当您使用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>
您还可以选择不为辅助数据编译View Models,如果它基本上是静态&#39;,并执行:
$.templates("#appTemplate").link("#page", appVm, {types: typesData});
<select data-link="typeId()"><
{^{for ~types.projectTypes}}
<option value="{{:id}}">{{:label}}</option>
{{/for}}
</select>
另一种方法是仅将实际更改的任何数据值或数组发送回服务器,例如通过使用CRUD / REST Web服务方法服务器更新。在这种情况下,您需要具有区分数据的代码,或使用observe或observeAll来响应增量更改...