1

私は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で同じ目標を達成するための他の(うまくいけばより良い)方法はありますか?ここで嫌いなものを改善するにはどうすればよいですか?

4

1 に答える 1

1

私はあなたに完全な答えを持っていません。ただし、役立つと思われるいくつかの小片があります。

匿名の json オブジェクトを含む、任意のオブジェクトのプロパティ キーを取得します。

Ember.keys(someObject);

json からオブジェクトの任意のランダム プロパティを設定します。

someObject.setProperties({json:"data"});

コンパニオン getter もあります。

someObject.getProperties("key1", "key2");
someObject.getProperties(Ember.keys(someObject));

キーをリストすることは、ビューを整理し、動的に変化するデータセット内のすべてのプロパティを個別に処理する場合に非常に役立ちます。

Ember.keys() を使用して、観察するプロパティを動的にリストすることができませんでした。単純なjsonプロパティをよりインテリジェントなEmberオブジェクトにし、「propertyDidChange」などを実装して「偽の」プロパティにオブザーバーを設定する必要があるのではないかと心配しています。

setProperties を使用すると、「json」を Ember.Object として保持し、動的プロパティを設定できます。オブジェクトの「任意の」プロパティを観察するのは難しい部分です。私は Ember にあまりにも慣れていないので、それを行うためのクリーンな方法を見つけ出すことはできませんでした...オブザーバーの混乱なしで。

于 2012-09-25T08:45:39.687 に答える