knockoutjs从输入元素创建新模型?

时间:2013-09-19 09:32:53

标签: data-binding mvvm knockout.js click submit

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/

1 个答案:

答案 0 :(得分:0)

从用户体验的角度来看,我不知道你想要实现的目标,我不确定你想要实现的目标。

你看过这个ko教程吗?它向您展示了如何构建代码以便能够添加新项目

http://learn.knockoutjs.com/#/?tutorial=collections