问:如何将把手绑定到应用程序对象变量,这样当该变量更新时,屏幕上的把手数据也会更新?
jsfiddle:http://jsfiddle.net/kQuVG/3/
车把:
<script type="text/x-handlebars">
{{App.Player.stats.basic}} Scrap
</script>
<button>Add Scrap</button>
的JavaScript :
App.Player = Em.Object.create({
stats:{
basic: 10,
premium: 20
}
});
$('button').click(function(){
console.log(App.Player.stats.basic);
App.Player.stats.basic += 10;
console.log(App.Player.stats.basic);
});
小提琴甚至不起作用,我想要做的是单击按钮并将10添加到App.Player.stats.scrap值,并将其反映在输出窗格中。这甚至是正确的做法吗?
提前致谢。
答案 0 :(得分:4)
小提琴有很多不妥之处。在设置和获取任何对象(甚至是单例和“App / Namespace全局”属性)的属性时,您应始终使用Ember的通用访问器。 Ember也有特定的命名约定,比如不使用大写字母来启动对象的实例('people',而不是'People')。你也应该使用目标/动作界面。
我已经创造了这些变化的小提琴。 http://jsfiddle.net/ud3323/Ac2hs/
<强>车把强>:
<script type="text/x-handlebars">
{{App.playerObj.stats.basic}} Scrap <br />
<button {{action "click" target="App.playerController"}}>Add Scrap</button>
</script>
<强>的JavaScript 强>:
var get = Ember.get, getPath = Ember.getPath, set = Ember.set, setPath = Ember.setPath;
App = Ember.Application.create();
set(App, 'playerObj', Object.create({
stats:Ember.Object.create({
basic: 10,
premium: 20
})
}));
set(App, 'playerController', Ember.Object.create({
click: function(view) {
getPath(App, 'playerObj.stats').incrementProperty('basic', 10);
}
}));
答案 1 :(得分:3)
您需要使用setter而不是直接赋值。我已经用适当的东西更新了小提琴。
<强>车把强>:
<script type="text/x-handlebars">
{{App.Player.stats.basic}} Scrap
</script>
<button>Add Scrap</button>
<强>的JavaScript 强>:
App.Player = Em.Object.create({
stats:{
basic: 10,
premium: 20
}
});
$('button').click(function(){
console.log(App.Player.stats.basic);
App.Player.setPath('stats.basic', App.Player.getPath('stats.basic') + 10);
console.log(App.Player.stats.basic);
});