私はember.jsを試しています。私の目標は、jsonとそれに近いテキストフィールドを含むtextareaを作成し、jsonの特定のプロパティの値を含めることです。これがjsonだとしましょう:
{
property1 : "value1",
property2 : "value2"
}
最初のテキストフィールドはproperty1に接続され、2番目のテキストフィールドはproperty2に接続されます。テキストフィールドの1つに何かを入力するときはいつでも、新しいjsonでtextareaを最新の状態に保ちたいと思います。textareaからjsonを更新するときはいつでも、jsonがまだ有効である限り、テキストフィールドも最新の状態に保ちたいと思います。
json自体と、テキスト領域に表示するためにjsonを文字列として取得するために使用される計算プロパティと、テキスト領域からjsonを解析して更新するために使用される計算プロパティを使用して動作させました。モデル。
App.JsonModel = Ember.Object.extend({
json : {property1:"value1",property2:"value2"},
asString : function(key, value) {
//getter
if (arguments.length === 1) {
return JSON.stringify(this.get('json'), null, ' ');
//setter
} else {
try {
this.set('json', JSON.parse(value));
} catch(err) {
}
return value;
}
}.property('json', 'json.property1', 'json.property2')
});
そしてこれはビューのあるhtmlです:
json:
{{view Ember.TextArea valueBinding="App.jsonModel.asString" class="json"}}
property1:
{{view Ember.TextField valueBinding="App.jsonModel.json.property1"}}
property2:
{{view Ember.TextField valueBinding="App.jsonModel.json.property2"}}
実例もご覧いただけます。
現在のコードでは、気に入らないことがいくつかあります。
- json自体では不十分であるため、jsonのバージョン文字列を変更する可能性のあるすべてのプロパティを指定する必要があります。これが期待される動作であるかどうかはわかりません
.property('json', 'json.property1', 'json.property2')
。特定のjsonプロパティについては言及せずに、asString関数を可能な限り汎用的にしたいと思います。 - に基づいて計算されたプロパティのゲッターとセッター
if (arguments.length === 1)
は、私の意見ではそれほど読みやすくありません。
ember.jsで同じ目標を達成するための他の(うまくいけばより良い)方法はありますか?ここで嫌いなものを改善するにはどうすればよいですか?