【问题标题】:providing new collection in "defaults" backbone.js在“defaults”backbone.js 中提供新集合
【发布时间】:2012-05-12 00:43:41
【问题描述】:

我是主干 js 的新手,我的第一次交互似乎很完整。问题是这样的
我做了一个这样的模型

window.Dir = Backbone.Model.extend({
                defaults: { 
                  "Name": "", 
                  "ChildNodes": new window.FSNodeCollection() },
                GetFullName: function () { this.get("id"); }
            });

window.FSNodeCollection 是我制作的其他一些集合。 你会注意到我已经将 ChildNodes 属性的值设置为new window.FSNodeCollection()

根据我所阅读的内容,这应该将 ChildNodes 的值设置为新的 window.FSNodeCollection()
但是当我像使用这种模型时

var fsNode = new window.FSNode({
                Type: "dir",
                Node: new window.Dir({
                    Name: "dir1",
                })
            });
var fsNode2 = new window.FSNode({
                Type: "dir",
                Node: new window.Dir({
                    Name: "dir2",
                })
            });
var subDir1Node = new window.FSNode({
                Type: "dir",
                Node: new window.Dir({
                    Name: "subDir1",
                    ChildNodes:new window.FSNodeCollection()
                })
              });
            fsNode.get("Node").get("ChildNodes").push(subDir1Node);

subDir1Node 被添加到 fsNodefsNode2ChildNodes
我做错了什么?

当我尝试做这样的事情时

var fsNode = new window.FSNode({
                Type: "dir",
                Node: new window.Dir({
                    Name: "dir1",
                    ChildNodes:new window.FSNodeCollection()
                })
            });
var fsNode2 = new window.FSNode({
                Type: "dir",
                Node: new window.Dir({
                    Name: "dir2",
                    ChildNodes:new window.FSNodeCollection()
                })
            });
var subDir1Node = new window.FSNode({
                Type: "dir",
                Node: new window.Dir({
                    Name: "subDir1",
                    ChildNodes:new window.FSNodeCollection()
                })
              });
            fsNode.get("Node").get("ChildNodes").push(subDir1Node)

问题不再存在。

【问题讨论】:

    标签: model-view-controller backbone.js


    【解决方案1】:

    问题是它们都引用同一个数组,您需要做的是确保在创建模型时初始化您的数组(您可以使用初始化方法,也可以分配一个函数将分配集合)。

    你可能想看看这些问题

    Arrays in a Backbone.js Model are essentially static?

    Why do new instances of a Backbone.js model contain additional values to the predefined defaults?

    【讨论】:

    • 是的,我认为声明Model.attributes 指向Objects 的键不是一个好主意。
    • 问题有时是backbone.js 构建代码的方式,很容易忘记它仍然是JavaScript,继承并不像在其他一些语言中那样工作。
    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2012-10-30
    相关资源
    最近更新 更多