gpt4 book ai didi

javascript - 更新 LayoutView 的模型

转载 作者:行者123 更新时间:2023-11-29 19:21:06 26 4
gpt4 key购买 nike

JSBin link

单击“点击次数”链接可以看到控制台显示更新后的模型数据,但原始显示的 HTML 没有变化。

在 LayoutView 上更新模型似乎不会导致 View 更新显示的数据。我认为这是 View 和模型之间默认交互的一部分。

最佳答案

Backbone 和 Marionette 不会自动将模型数据绑定(bind)到 View 。您将必须监听该模型以在 View 中更改并更新它。

例如,当模型中的任何数据发生变化时,您可以简单地完全重新渲染 View :

initialize: function(){
this.listenTo( this.model, "change", this.render );
}

或者为某条预期会发生变化的特定数据创建监听器,只更新 View 的一部分。如果 View 更复杂,这是首选:

onRender: function(){
this.listenTo( this.model, "change:value", this.renderValue );
},
renderValue: function(){
/* This expects that you wrap the value with
<span class="value"></span>
in the template */
this.$('.value').text( this.model.get('value') );
}

这是一个完整的工作示例:

var TestLayoutView = Mn.LayoutView.extend({
template: '#lvTemplate',
el: '#app',
events: { 'click .watchhere': 'updateValue'},
onRender: function(){
this.listenTo( this.model, "change:value", this.renderValue );
},
renderValue: function(){
this.$('.value').text( this.model.get('value') );
},
updateValue: function (clickedView) {
this.model.set('value', this.model.get('value') + 1);
}
});

var testLV = new TestLayoutView({
model: new Backbone.Model({ value: 15 })
});

testLV.render();
<script src='http://code.jquery.com/jquery.js'></script>
<script src='http://underscorejs.org/underscore.js'></script>
<script src='http://backbonejs.org/backbone.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/backbone.marionette/2.4.2/backbone.marionette.js'></script>

<script type="text/template" id="lvTemplate">
<a class='watchhere' href="#">Clicks <span class="value"><%= value %></span></a>
</script>

<div id="app"></div>

关于javascript - 更新 LayoutView 的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com