将把手绑定到ember.js中的应用程序对象

时间:2012-05-03 16:47:50

标签: ember.js

问:如何将把手绑定到应用程序对象变量,这样当该变量更新时,屏幕上的把手数据也会更新?

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值,并将其反映在输出窗格中。这甚至是正确的做法吗?

提前致谢。

2 个答案:

答案 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而不是直接赋值。我已经用适当的东西更新了小提琴。

http://jsfiddle.net/kQuVG/4/

<强>车把

<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);
});
相关问题