Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;创建;用于嵌套对象的KO映射选项在“主”时未使用;创建;指定_Javascript_Knockout.js_Knockout Mapping Plugin - Fatal编程技术网

Javascript &引用;创建;用于嵌套对象的KO映射选项在“主”时未使用;创建;指定

Javascript &引用;创建;用于嵌套对象的KO映射选项在“主”时未使用;创建;指定,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我有以下资料: var CardViewModel = function (data) { ko.mapping.fromJS(data, {}, this); this.editing = ko.observable(false); this.edit = function() { debugger; this.editing(true); }; }; var mapping = { 'cards': {

我有以下资料:

var CardViewModel = function (data) {
    ko.mapping.fromJS(data, {}, this);
    this.editing = ko.observable(false);
    this.edit = function() {
        debugger;
        this.editing(true);
    };

};


var mapping = {

    'cards': {
        create: function (options) {
            debugger;  // Doesn't ever reach this point unless I comment out the create method below
            return new CardViewModel(options.data);

        }
    },

    create: function(options) {
        //customize at the root level.  
        var innerModel = ko.mapping.fromJS(options.data);
        //debugger;
        innerModel.cardCount = ko.computed(function () {
            //debugger;
            return innerModel.cards().length;
        });

        return innerModel;
    }
};

var SetViewModel = ko.mapping.fromJS(setData, mapping);
debugger;
ko.applyBindings(SetViewModel);

当我运行此命令时,“cards”方法从未被命中,因此CardViewModel中的那些编辑属性不可用。如果注释掉“create”方法,我可以点击调试器,但我需要两者。知道发生了什么吗

'cards'
不是有效的Javascript变量名。尝试其他没有单引号的东西

您还需要编辑您的
CardViewModel
代码,因为
内部函数中的此
指的是内部函数,而不会在外部函数中看到可观察到的敲除

var CardViewModel = function (data) {
    var self = this;
    ko.mapping.fromJS(data, {}, this);
    this.editing = ko.observable(false);
    this.edit = function() {
        debugger;
        self.editing(true);
    };
};

谢谢你,戴夫。我对“cards”有点困惑——我在下面的例子中定义了“children”子数组:在我的例子中,“cards”是一个数组。当我删除“create”方法时,这个方法确实被击中了。杰克,这个回答了你原来的答案吗?我现在也处在一个类似的位置,删除单引号没有什么区别。除非删除主创建项,否则我永远不能对子对象使用创建项。我不明白为什么会接受此项。这显然是@JakeP指出的击倒语法的一部分。此外,在修改后的CaredViewModel中,没有任何地方引用映射。