使用backboneJS+backbone-relational+requireJS创建自相关嵌套模型



我知道有很多问题,我已经通过这些答案解决了第一个问题。我决定不破坏我的全局命名空间,而是使用这种类型的解决方案。但现在,我有一个不同的问题,涉及相同的框架。我的模型是这样开始的。

define([
'backbone',
'backbone.relational'
], function(Backbone){
var MenuNode = function () {
    Backbone.RelationalModel.apply(this,arguments);
}
var NodeCollection = function() {
    Backbone.Collection.apply(this,arguments);
}
MenuNode = Backbone.RelationalModel.extend({
    constructor: MenuNode,
    relations:[
        {
            type: Backbone.HasMany,
            key: "children",
            relatedModel: MenuNode,
            collectionType: NodeCollection,
            reverseRelation: {
                key: "parent"
            }
        }
    ]
})
NodeCollection = Backbone.Collection.extend({
    constructor: NodeCollection,
    model: MenuNode,
    url: function() {
        return "/nodes"
    }
})

这将为我的应用程序创建nessecary模型,它是一个jstree。但我的问题是如何创建与api和关系的连接,以及如何使用主干获取节点的当前子节点。我有api:

 nodes/            returns the root nodes in a simplified version
 nodes/id          returns the full info about node, with children and parent simplified
 nodes/id/children returns the simplified version of the children of a specific node

但是,如何通过主干获取特定节点的当前子节点?我希望能够在我想加载孩子的时候打电话,但不能预加载孩子。我正在尝试保存服务器以备请求。因为有一个大的树视图,意味着它不安全地加载整棵树。

只要问任何问题就可以澄清更多。前方的Thx

您应该能够通过使用字符串文字作为相关模型来实现这一点:

relations:[
    {
        type: Backbone.HasMany,
        key: "children",
        relatedModel: 'MenuNode',
        collectionType: NodeCollection,
        reverseRelation: {
            key: "parent"
        }
    }
]

我发现我的api非常奇怪。我有一个egde案例,假设我的jstree由Backbone支持,而不是jstree-ajax本身。因为我必须依靠骨干来看待问题,我希望他们能相互合作。

这种修改已经完成,但没有出现在关系模型部分。它在我的后端,直接指向节点时为孩子们提供服务,这有助于我正确构建模型。

所以它可以工作,但jstree不支持主干

相关内容

  • 没有找到相关文章