爲了確保只有一個模型被實例化,並且在使用它的其他元素之間共享,可以在任何元素對其進行更改時偵聽和更新,您可以使用Singleton模式。你可以閱讀更多關於它的信息here
如果你使用Requirejs,你可以得到相同的效果,如果你總是返回實例化的模型。例如:
// the shared model
define([
'jquery',
'underscore',
'backbone'
], function ($, _, Backbone) {
'use strict';
var Model = Backbone.Model.extend({
// ...
});
// return instantiated, so we'll get the same object back whenever we use this model (singleton)
return new Model();
});
// a view using the model
define([
'jquery',
'underscore',
'backbone',
'model'
], function ($, _, Backbone, modelInstance) {
'use strict';
var View = Backbone.View.extend({
initialize: function() {
// listen to what other elements do
this.listenTo(modelInstance, 'eventFromOtherElement', this.doSomething);
// when this element does something, other elements should be listening to that event
modelInstance.trigger('thisViewEvent');
},
doSomething: function() {
// ...
}
});
return View;
});
我真的不想有這樣的代碼:'new Users({matchboxes:matchboxes})',因爲這意味着每次我想共享數據時,我只需要添加交叉引用。 – srcspider
我同意,因此第一段。除非使用集合時常見的特定集合模型關係,否則不應嵌套模型和集合。但是你仍然需要一些將它們相互關聯的方式。這就是爲什麼我建議在需要時存儲相關模型的ID。 – nordhagen