jsFiddle:http://jsfiddle.net/Piercy/mD4kG/
所以我最近开始使用knockout.js。我已经开始了解它,但我正在努力解决以下问题。
我有以下模型和视图模型结构:
function ViewModel() {
var self = this;
self.Emails = ko.observableArray([]);
self.AddEmail = function() {
// make ajax call here
self.Emails.push(new EmailModel(data));
};
}
function EmailModel(data) {
this.Id = data.Id;
this.Name = data.Name;
this.Subject = ko.observable(data.Subject);
this.DisplayId = ko.observable(data.DisplayId);
}
我希望ViewModel.Emails数组是EmailModel的数组,我的问题是如何创建要插入的新模型。
我想象这样的事情:
<select data-bind="options: Emaillistdata, optionsText: 'Name', optionsValue: 'Id', optionsCaption: 'Choose...', value: DisplayId"></select><br /><br />
<input type="text" data-bind="value: Name"/><br />
<input type="text" data-bind="value: Subject"/><br />
<button data-bind="click: AddEmail">Add Email</button>
但是,这样做意味着Name,Subject和DisplayId绑定需要在ViewModel中(它们不是)。此外,我必须将这些添加到ViewModel似乎很奇怪。我有点期望能够点击按钮并拥有一个数据变量,我只能做data.Name,data.Subject和data.DisplayId并且这些变量没有绑定到任何模型,它们只是因为我已经提交了将它们命名为这样或者什么?然后我可以将它们添加到数组中,并使它们成为ViewModel的一部分。
我可以使用标准JS完成所有这些,然后将其添加到模型中,但当其他所有内容都使用knockout时,这似乎也很奇怪。不过这可能就是答案吗?
jsFiddle:http://jsfiddle.net/Piercy/mD4kG/
答案 0 :(得分:0)
从用户体验的角度来看,我不知道你想要实现的目标,我不确定你想要实现的目标。
你看过这个ko教程吗?它向您展示了如何构建代码以便能够添加新项目