KnockoutJS - 使用表单中表格中的数据

时间:2014-02-19 20:53:31

标签: javascript jquery ajax mvvm knockout.js

我是淘汰赛的新手,我几个小时都在研究我的主题无济于事,所以我终于发现自己实际上问了一个问题,我不认为已经问。

无论如何,我正在编写一个基本的单页应用程序,它通过AJAX(完成)从服务器提取数据,显示这些记录的表(工作,但可能没有完成),并使用户能够编辑记录从jQueryUI对话框中的表格中的表格,最好不加载来自服务器的更多数据,因为所有需要的数据当前都在表格中(这是我搞砸了的地方),然后最终只发布一条记录服务器。作为奖励,我希望使表单更新表中的内容,以便不需要重新加载。

我的基本视图模型。我还有一些绑定代码,用于通过单击我遗漏的标题对列进行排序,因为它与问题无关

function AppViewModel() {
    var self = this;

    self.records = ko.observableArray(ajaxRecords); //ajaxRecords is a JSON object from the server

    /*
        THIS SECTION MOVED BELOW FOR EXPLANATION
                                                  */

}

我已经能够通过使用从每行的click函数绑定传递对象的新viewModel将数据导入表单:

    self.switchDataToForm = function(clickedItem) {
        ko.applyBindings(new FormViewModel(clickedItem), document.getElementById('detailsPage'));
    }

但我觉得这是一种糟糕的做事方式,这应该可以通过一个ViewModel实现。

我很想知道人们对此有什么看法。对于一些人来说,这可能是非常明显的,但我只是很难绕过淘汰赛的思维方式。如果这是一个jQuery任务,它将在几个小时前完成,但有更多的标记。我对Knockout JS提供的JS开发场景感到非常兴奋,我想在实践中开始使用它。

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

function AppViewModel() {
    var self = this;

    self.records = ko.observableArray(ajaxRecords); //ajaxRecords is a JSON array from the server

    self.form = ko.observable();

    self.switchDataToForm = function(clickedItem) {
        self.form(new FormViewModel(clickedItem));
    }

    /* another data goes here */
}

function FormViewModel(item) {
    var self = this;
    self.someProp = ko.observable(item.someProperty);

    /* another observables goes here */
}

和html:

<form id="detailsPage" data-bind="with: form">
    <input type="text" data-bind="value: someProp" />
    ... 
</form>

你可以在这个小提琴中看到它是如何运作的:http://jsfiddle.net/Ivan_Srb/MKB8W/2/