Knockout没有保存/检测更改

时间:2014-02-25 08:57:08

标签: knockout.js asp.net-mvc-5

HTML

       <div class="infoview-details" data-bind="foreach: Container"> 
            @* <span data-bind="text: sub().sub_name" ></span>*@
            <div class="row-fluid">
                <div class="span3">
                    <span data-bind="visible: sub().interval_from"><input type="text" data-bind="value: sub().interval_from" /></span>
                    <span data-bind="text: sub().limitTypeSymbol" ></span>
                    <span data-bind="visible: sub().interval_to"><input type="text" data-bind="value: sub().interval_to" /></span>
                    <span data-bind="visible: sub().value"><input type="text" data-bind="value: sub().value" /></span>
                    <a class="btn btn-primary"data-bind="click: $parent.loadNewTestValidation">Update</a>
                </div>
            </div>




            <hr />             
        </div>
        <a class="btn btn-primary"data-bind="click: saveValidation">Save</a>

视图模型

function baseAppViewModel() {
    var self = this;

    self.Container= ko.observableArray([]); 

    self.saveValidation = function (data) {

        app.ajax.post({
            url: app.url() + 'api/base/save/' +       self.id(),
            data: ko.toJS(data.Container),
            done: function () {
                self.load(self.id());

            }

        });
    };

模型1

function Container(data) {
    var self = this;

    self.sub= ko.observable(new sub(data.sub));       
}

模型2

function sub(data) {
    var self = this;

    self.id = ko.observable(data.id);
    self.type_output_id = ko.observable(data.type_output_id);
    self.output_type_id = ko.observable(data.output_type_id);
    self.validation_name = ko.observable(data.validation_name);
    self.limit_type = ko.observable(data.limit_type);
    self.value = ko.observable(data.value);
    self.interval_from = ko.observable(data.interval_from);
    self.interval_to = ko.observable(data.interval_to);    
}

当我更改和更新时,我从输入中获取新值,但是如果添加新值并保存,则不会 当我保存时,我甚至没有得到发送到淘汰赛的xhr请求中的数据。 所以html代码中的一些东西一定是错的,但我没有想法。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

答案是:

        <div data-bind="with:Container">

            <input class="btn-save float-r" type="submit" data-bind="click: $parent.saveValidation" />
        </div>

然后检测到新的更改。