【问题标题】:Knockout and observablearrays using mapping plugin使用映射插件的 Knockout 和 observablearrays
【发布时间】:2013-09-27 19:30:09
【问题描述】:

当我第一次调用下面的代码时,它运行良好,但是在第二次调用中,gridviewmodel 变得混乱,所有数据都变得多余

$.ajax({
        url: 'rest service uri',
        type: 'GET',
        data: parameters,
        dataType: 'json',
        crossDomain: true,

        success: function (data) {

            function gridviewModel() {
                var self = this;
                self.items = ko.mapping.fromJS(data);
                self.columns = [
                    new column("Name", "name", "Asc"),
                    new column("URL", "name", "Asc"),
                    new column("Embargo Date", "name", "Asc"),
                    new column("Status", "name", "Asc"),
                    new column("Reviewer Name", "name", "Asc"),
                    new column("Approver Name", "name", "Asc")
                ];
            };


            ko.applyBindings(new gridviewModel());
}

我尝试使用 removeAll() 清除可观察数组,但它对我不起作用。

有什么想法吗?

只是为了将来任何人都可能面临这个问题,我设法通过在 Knockout 映射插件中调用 ko.mapping.fromJS(data, gridviewModel.items) 来修复它 完整代码是

var gridviewModel = {

        items: ko.mapping.fromJS([]),
        columns: [
                    new column("Name", "name", "Asc"),
                    new column("URL", "name", "Asc"),
                    new column("Embargo Date", "name", "Asc"),
                    new column("Status", "name", "Asc"),
                    new column("Reviewer Name", "name", "Asc"),
                    new column("Approver Name", "name", "Asc")
                ]
};

$(function () {
    ko.applyBindings(gridviewModel, document.getElementById("wip"));

});

希望这可以解决其他问题。

【问题讨论】:

    标签: json asp.net-mvc-4 knockout.js knockout-mapping-plugin knockout-mvc


    【解决方案1】:

    在阅读了关于敲除映射插件的文档后,您的映射 data 对象似乎应该是您的 viewmode,而不是您的 viewmodel 中的属性。如果我是你,我会修改我的代码以使用以下内容:

              function gridviewModel() {
                    var self = this;
                    self.items = data;
                    self.columns = [
                        new column("Name", "name", "Asc"),
                        new column("URL", "name", "Asc"),
                        new column("Embargo Date", "name", "Asc"),
                        new column("Status", "name", "Asc"),
                        new column("Reviewer Name", "name", "Asc"),
                        new column("Approver Name", "name", "Asc")
                    ];
                };
    
    
                ko.applyBindings(ko.mapping.fromJS(new gridviewModel()));
    

    这将按照文档指定映射您的整个对象。

    【讨论】:

    • 非常感谢您的 cmets,我错过了调用 updateFromJS() 方法。 'code' ko.mapping.fromJS(data, gridviewModel.items);
    • 很高兴您发现了问题!你向我介绍了一个很酷的插件!我会在早上使用它。谢谢。
    • 如果您在堆栈中搜索淘汰制映射,映射插件上还有很多其他好的线索
    • 感谢您的建议。
    猜你喜欢
    • 2012-11-05
    • 2014-03-06
    • 2012-12-18
    • 2014-03-04
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    相关资源
    最近更新 更多