2012-05-03 7 views
1

Q:ハンドルバーをアプリケーションオブジェクト変数にバインドするにはどうしたらいいですか?その変数が更新されると、画面上のハンドルバーデータも更新されます。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); 
}); 

フィドルも機能していない、私がやりたいものにですボタンをクリックしてApp.Player.stats.scrap値に10を追加し、それを反映させます出力ペインに表示されます。これはこれを行う正しい方法ですか?

ありがとうございます。

g

答えて

4

フィドルと間違ってかなりの数のものがあります。どのオブジェクト(たとえシングルトンや "App/Namespace global"プロパティ)でもプロパティを設定したり取得したりするには、常に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); 
    } 
})); 

+1

:あなたが使用する必要がありますのでEmber.Button'は廃止され、 '' {{ = "App.playerController"}}>スクラップを追加します '、http://jsfiddle.net/pangratz666/Twg6V/ – pangratz

+1

を参照してくださいこれは私がEmberコミュニティを愛する理由です。私は私の答えを更新しました。ありがとう@pangratz。私は減価償却を知らなかった。 –

+3

簡単な解決策でもあります:。 'ある、getPath(アプリケーション、 'playerObj.stats')incrementProperty( '基本'、10);' – pangratz

3

値を直接割り当てる必要はありません。私は動作するものでフィドルを更新しました。

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); 
}); 
関連する問題