1

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

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

提前致谢。

G

4

2 回答 2

4

小提琴有很多问题。在设置和获取任何对象的属性(甚至是单例和“应用程序/命名空间全局”属性)时,您应该始终使用 Ember 的通用访问器。Ember 也有特定的命名约定,例如不使用大写字母来启动对象实例(“人”,而不是“人”)。您还应该使用目标/操作界面。

我用这些变化创造了一个小提琴。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);
    }
}));

​</p>

于 2012-05-03T17:07:08.510 回答
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);
});
于 2012-05-03T16:53:46.427 回答