fan*_*ncy 6 javascript model coffeescript backbone.js backbone-relational
class TheModel extends Backbone.RelationalModel
relations:[
type: Backbone.HasMany
key: 'subModels'
relatedModel: SubModel
collectionType: SubModels
reverseRelation:
key: 'TheModel'
]
themodel = new the TheModel({subModels:[{#stuff},{#stuff},{#stuff}]})
Run Code Online (Sandbox Code Playgroud)
我有createModels,所以themodel.get('subModels')返回一组模型.
现在,如果我将更改的subModel数据传递给 mymodel
themodel.set({subModels:[{changedstuff},{stuff},{stuff}]})
Run Code Online (Sandbox Code Playgroud)
不应该themodel抛出一个change事件?它不适合我.
如果我将相同的数据传入,则更是如此 mymodel
themodel.set({subModels:[{samestuff},{samestuff},{samestuff}]})
Run Code Online (Sandbox Code Playgroud)
themodel.attributes.subModels投掷add和update事件,即使没有什么是新的.
我不确定为什么会出现这些问题,任何帮助都会很棒,谢谢!!!!
如果您通过设置新集合来重置整个关系,Backbone-relational 将(目前)仅替换整个集合,而不是检查差异。因此,它将remove为所有当前事件触发一个事件subModels,然后add为每个新事件触发事件。
不过,我确实使用change以下代码获取了事件(如果发布的代码包含完整的示例,则会有所帮助;)
var SubModel = Backbone.RelationalModel.extend({});
var TheModel = Backbone.RelationalModel.extend({
relations: [{
type: Backbone.HasMany,
key: 'subModels',
relatedModel: SubModel,
reverseRelation: {
key: 'TheModel'
}
}]
});
themodel = new TheModel({subModels: [{ id: 5 },{id: 7},{id: 8}]})
themodel.bind( 'change', function() {
console.debug( 'change; args=%o', arguments );
});
themodel.bind( 'change:subModels', function() {
console.debug( 'change:subModels; args=%o', arguments );
});
themodel.bind( 'update:subModels', function() {
console.debug( 'update:subModels; args=%o', arguments );
});
themodel.bind( 'add:subModels', function() {
console.debug( 'add:subModels; args=%o', arguments );
});
themodel.bind( 'remove:subModels', function() {
console.debug( 'remove:subModels; args=%o', arguments );
});
console.debug( 'set new subModels' );
themodel.set( {subModels: [{ id: 5 },{id: 7},{id: 9}] } )
Run Code Online (Sandbox Code Playgroud)
这会产生以下输出:
set new subModels
change:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, [Object { id=5}, Object { id=7}, Object { id=9}], Object {}]
change; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, undefined]
remove:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object { _related={...}}]
remove:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object { _related={...}}]
remove:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object { _related={...}}]
add:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object {}]
add:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object {}]
add:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object {}]
update:subModels; args=[Object { _queue={...}, attributes={...}, _escapedAttributes={...}, more...}, Object { length=3, models=[3], _byId={...}, more...}, Object {}]
Run Code Online (Sandbox Code Playgroud)
如果您没有看到这些更改事件,您可以检查一下您正在使用哪个版本的主干和主干关系吗?
| 归档时间: |
|
| 查看次数: |
1461 次 |
| 最近记录: |