标签: backbone-relational

Backbone-relational.js + Backbone.View(s)

问题:文档很少,而且我是一个菜鸟 - 任何人都可以确认正确的(假设有一种)方法将Backbone.Views绑定到Backbone.RelationalModel的实例(来自backbone-relational.js)更新/渲染到dom?基于Backbone中正常的模型/视图绑定,我尝试了一些不同的方法,但收效甚微.

背景故事(/更多信息): 我正在学习Backbone.js的绳索,并且在过去的一周里不得不接受很多.如果我遗漏了一些明显的东西(极有可能 - 包括以下处理我问题的"正确"方式),请打电话给我.

我正在处理一个mongodb支持的REST接口(我没有完全控制 - 或者我将重新设计服务器端的行为),它充分利用了嵌套字典,所以我一直在阅读如何在Backbone中最好地表示(虽然没有打破Backbone提供的伟大的save()+服务器同步).

我见过两种选择:backbone-relationalligament.js.

我开始使用backbone-relational.js,并且为树中的各种字典创建了RelationalModel(骨干关系代替Backbone的标准模型),这些字典由REST接口传回.定义它们之间的关系,并且控制台记录每个模型的JSON(在它们各自的初始化函数中)显示它们都在整个集合级别的fetch()命令上正确地从服务器上调用/加载.

所以,这一切都很棒.

问题:我有"监听"每个模型的更新视图(以及应该在dom上渲染模板的绑定函数),并且它们根本不会"触发"(更不用说渲染......).主视图触发fetch(),没有问题,加载"顶级"模型并在dom上呈现它 - 但代表"顶级"模型中的"外键"模型的视图永远不会(尽管数据肯定会加载到每个模型中,如上面提到的每个模型的控制台登录所示.

非常感谢任何见解.

直接回复下面的Raynos回复(感谢Raynos!): 如果我为UpperLevelCollection定义了一个基本url,而UpperLevelModels存在于服务器上的(UpperLevelCollection url)/(UpperLevelModel id),那么我如何将这些LowerLevelCollections映射到字典键中服务器端的每个UpperLevelModel的一个JSON转储?换句话说,使用模型中的集合可以正确地处理来自服务器的数据转储(显然非常简化,但可以解决问题)并正确保存/更新/同步它?

[{
    "some_key": "Some string",
    "labels": ["A","List","Of","Strings"],
    "content": [{
        "id": "12345"
        "another_key": "Some string", 
        "list": ["A","list","of","strings"],
    },{
        "id": "67890"
        "another_key": "Some string", 
        "list": ["A","list","of","strings"],
    }],
}]
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js backbone-relational

5
推荐指数
1
解决办法
2646
查看次数

需要下划线模板帮助 - 模板集合

我正在使用underscore.js进行模板化.这是一个示例模板.

<script id="discussion-template" type="text/html">
    [[ _.each(discussions, function(topic){ ]]
       <li>
           <article id="{{ topic.htmlId() }}">
               <a class="section-arrow mir" href="#">toggle</a>
               <h3>{{ topic.get('text') }}</h3>
               <ol></ol>
           </article>           
       </li>
    [[ }); ]]
</script>
Run Code Online (Sandbox Code Playgroud)

在backbone.js view.render()里面我将一个集合传递给模板.

this.el.append(this.template({ discussions: this.collection.models }));
Run Code Online (Sandbox Code Playgroud)

我的问题是,我是否必须编写循环代码?我可以不只是传入一个集合,并且下划线足够聪明,可以在集合中为每个项目呈现一个项目吗?underscore.js也为嵌套模板提供了一些东西吗?集合中的每个项目实际上都有我需要渲染的项目集合.如何从此模板中调用另一个模板.当然,非常感谢任何链接,提示和/或教程.

谢谢!

javascript templates backbone.js underscore.js backbone-relational

5
推荐指数
2
解决办法
5190
查看次数

fetchRelated没有提取相关

一直试图让它运行一段时间.基本上我有一个休息api作为后端返回json,一切都很好.

我遇到的问题是骨干关系.我确定我错了,但我一直在寻找网络一段时间,找不到任何帮助.

我试图在"职业"和"武器"模型之间建立很多关系.这是我的代码:

Profession = Backbone.RelationalModel.extend({
    urlRoot: '../api/professions',

    relations: [{
        type: Backbone.HasMany,
        key: 'weapons',
        relatedModel: 'Weapon',
        collectionType: 'Weapons',
        reverseRelation: {
            key: 'profession',
            includeInJSON: 'id',
            keySource: 'profession_id'
        }
    }]
});

Weapon = Backbone.RelationalModel.extend({
    urlRoot: '../api/weapons'
});
Weapons = Backbone.Collection.extend({
    model: Weapon,

    url: function(models){
        return '../api/weapons';
    }
});
Run Code Online (Sandbox Code Playgroud)

并调用那些api端点返回:

{name: "Profession1", id: 1}

[{name: "Weapon1", profession_id: 1}, {name: "Weapon2", profession_id: 1}]
Run Code Online (Sandbox Code Playgroud)

所以,如果我理解正确,profession.fetchRelated('weapons')应该发送一个httprequest到武器集合的url并拉出具有1的profession_id的对象.但是当我运行时没有任何反应profession.fetchRelated('weapons')

javascript backbone.js backbone-relational

5
推荐指数
1
解决办法
2209
查看次数

Backbone.js:将值从Collection传递给每个模型

我需要在初始化时将视图中的值传递给集合中的每个模型.

Till Collection我们可以在Backbone.Collection构造函数中传递'options'.

在此之后,是否有任何技术可以将一些"选项"传递到集合中的每个模型中?

var Song = Backbone.Model.extend({
    defaults: {
        name: "Not specified",
        artist: "Not specified"
    },
    initialize: function (attributes, options) {
        //Need the some_imp_value accessible here
    },
});

var Album = Backbone.Collection.extend({
    model: Song

    initialize: function (models, options) {
        this.some_imp_value = option.some_imp_value;
    }
});
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js backbone-relational

5
推荐指数
1
解决办法
2095
查看次数

Backbone.js View可以有模型和集合吗?

Backbone.js View可以有一个Model和一个Collection

我问的原因是因为我正在使用一个View,其中包含一个绘有地点的地图(使用传单库).

Collection是一组模型,其中包含要在地图上绘制的坐标.

Model像地图边界和地图形状保持的东西.

不知道还有什么可以拉掉这个......

任何帮助表示赞赏,谢谢!

javascript backbone.js backbone-relational backbone-views

5
推荐指数
1
解决办法
666
查看次数

backbone-relational .set()方法不更新相关模型

到目前为止,我的骨干关系工作得相当好.我建立了良好的关系和反向关系(见下文).当我最初调用.fetch()我的Country模型实例时,nominees数组被nominee完美地解析为模型.

.fetch()然而,当我稍后再次呼叫时,即使nominee数据已经改变(例如,投票计数增加),这些相关模型也不会更新.从本质上讲,Backbone的.set()方法似乎最初了解关系,但后来却不了解.

国家模式

var Country = Backbone.RelationalModel.extend({

    baseUrl : config.service.url + '/country',

    url : function () {
        return this.baseUrl;
    },

    relations : [
        {
            type : Backbone.HasMany,
            key : 'nominees',
            relatedModel : Nominee,
            collectionType : Nominee_Collection,
            reverseRelation : {
                key : 'country',
                includeInJSON : false
            }
        }
    ]
});
Run Code Online (Sandbox Code Playgroud)

JSON响应 country.fetch()

{
  "entrant_count" : 1234,
  "vote_count" : 1234,
  "nominees" : [
    {
      "id" : 3,
      "name" : …
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js backbone-relational

5
推荐指数
1
解决办法
1085
查看次数

骨干关系:破坏模型的正确方法(没有http请求,仅限客户端)

我需要在客户端销毁骨干关系模型,而不执行任何http请求.在"破坏"一词下,我的意思是从所有集合中删除模型,从其他模型中删除所有关系到当前模型,最后删除有关当前模型的所有数据.

如何实现这一目标?

javascript backbone.js backbone-relational

5
推荐指数
1
解决办法
635
查看次数

将URL传递给骨干中的关系集合

我正在使用Backbone关系,这很棒.我遇到的问题是当我需要后端提供要附加的模型的URL时.

当使用一对一关系时,这不是一个问题,因为模型可以将url作为其自身的属性保留.

另一方面,该集合在其自身内创建了一个单独的模型.

将这些绑定在一起的最佳方法是什么.以下示例

{
    "user": {
        "url": "http://example.com/api/user/1"
    },
    "permissions": {
        "url": "http://example.com/api/user/1/permissions"
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我希望用户是提供了url的模型,以及提供了url的集合的权限.

我试过的是让收集工作如下:

{
    "permissions": {
        "url": "https://example.com/api/user/1/permissions"
        "data": []
    }
}
Run Code Online (Sandbox Code Playgroud)

但我无法运行解析变量的解析.

javascript backbone.js backbone-relational

5
推荐指数
1
解决办法
199
查看次数

骨干代码产生不可用的堆栈跟踪

我正在使用一个相对较大的骨干代码库,似乎每当我得到一个javascript错误,无论它是什么.控制台中显示的堆栈跟踪看起来完全相同(下面的示例).我的所有模型/视图都是通过骨干.extend方法创建的.有没有其他人有这个问题,或知道如何解决它?我通常必须在任何地方放置console.log语句以找到错误的来源并且非常耗时.谢谢.

jquery-1.5.min.js:16       Uncaught InvalidConstructorArgs
   d.extend._Deferred.f.resolveWith     jquery-1.5.min.js:16
   v                                    jquery-1.5.min.js:16
  d.support.ajax.d.ajaxTransport.send.c jquery-1.5.min.js:16
Run Code Online (Sandbox Code Playgroud)

javascript javascript-framework backbone.js backbone-relational

4
推荐指数
1
解决办法
311
查看次数

Backbone Relational没有正确设置反向关系?

我正在尝试使用Backbone.Relational在我的应用程序中设置一些关联.

基本上我有Backbone SearchService模型.搜索具有ServiceList包含许多服务的集合.

但是,我似乎无法从服务初始化程序中访问父搜索.当我尝试记录父搜索时,我得到了null.谁能看到我做错了什么?

我的搜索模型设置如此(代码可能有语法错误,我正在动态地从coffeescript翻译):

var Search = new Backbone.RelationalModel({
  urlRoot: '/searches',

  relations: [{
    type: Backbone.HasMany,
    key: 'services',
    relatedModel: 'Service',
    collectionType: 'ServiceList',
    reverseRelation: {
      key: 'search'
    }
  }],

  initialize: function(options) {
    // => Search "has services:", ServiceList
    console.log this, "has services:", @get('services');
  }
});


var Service = new Backbone.RelationalModel
  initialize: function() {
    // => Service "in" null
    console.log this, "in", @get('search');
  }
});
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢CoffeeScript:

class Search extends Backbone.RelationalModel
  urlRoot: '/searches'

  relations: …
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js backbone-relational

4
推荐指数
1
解决办法
2372
查看次数