javascript - 从模型中检索 Backbone 集合并将其保留为集合

标签 javascript backbone.js collections model

我目前正在研究backbone.js,并遇到了一些奇怪的行为,试图在模型和集合之间创建一些关系。

这是我的模型/集合

Element = Backbone.Model.extend({
  name: 'element'
});

Elements = Backbone.Collection.extend({
  name: 'elements',
  model: Element
});

Application = Backbone.Model.extend({
  name: 'app',
  initialize: function() {
    this.elements = new Elements(this.get('elements'));
  } 
});

当我通过 application.get('elements') 检索元素时,我得到一个“false”,询问这个新对象是否是 Backbone 的实例。收藏.

var gotElements = application.get('elements');
var isCollection = gotElements instanceof Backbone.Collection;

那么我是否做错了什么,或者我是否必须创建一个新的集合实例并用我从应用程序收到的集合填充它?

最佳答案

在初始化函数中,执行 this.elements 直接在模型上设置一个名为“elements”的属性(因此 model.elements 将是您的 Backbone 集合)。问题是,当您尝试通过调用 application.get('elements') 检索 this.elements 时,您将看到它返回 undefined (这就是为什么它不是 Backbone 集合的实例)。

为了可以使用 model.get 检索模型属性,需要使用 model.set(attribute) 设置它。如果您在控制台中检查模型,您会发现差异。 model.set(myData) 将您的数据添加到模型的属性哈希中。 model.myData = myData 将“myData”属性直接添加到模型中。

要使其正常工作,您可以执行以下操作:

Element = Backbone.Model.extend({
  name: 'element'
});

Elements = Backbone.Collection.extend({
  name: 'elements',
  model: Element
});

Application = Backbone.Model.extend({
  name: 'app',
  elements: null
});

var application = new Application({
  elements: new Elements()
});

var myElements = application.get('elements');

myElements 现在应该是一个空的 Backbone Collection

关于javascript - 从模型中检索 Backbone 集合并将其保留为集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17513821/

相关文章:

javascript - 在 react-router-dom v6 中使用历史

ajax - 仅将事件 ajaxStart() 和 ajaxStop() 附加到当前主干 View

backbone.js - 使用查询字符串导航路线

java - 是否有模拟 Collections.singleton()/Collections.singletonList()/Collections.singletonMap() 来获取可变集合?

c# - 在 C# 中,是否可以循环遍历相同基类型的多个集合?

javascript - 如何使用链接更改 Css 编码

javascript - 为什么添加分号会使这段代码起作用?

cordova - 如何修复 Windows Phone 中软按钮与应用程序重叠的问题?

c# - 子属性更改时,FreezableCollection 不提供更改通知

javascript - 在 Angular 服务中找不到方法