1

Ember Map 値を値にバインドするにはどうすればよいですかTextField。この構成があるとしましょう:

App.AppsController = Em.Controller.extend({
    selections: null
});

App.AppsRoute = Ember.Route.extend({
    setupControllers: function(controller, model) {
        controller.set('selections', Ember.Map.create());

    }
});

そして私のテンプレートでは:

{{view Ember.TextField valueBinding="bindingToMap"}}

私は自分の地図から鍵がvalueBinding="controller.selections.somekey"どこにあるかを試しました。somekeyただし、値がバインドされることはありません。最初はマップが空であることに注意してください。これが問題の根源になる可能性はありますか?

編集:コントローラーで整数値を使用してバインディングを使用しようとしましたが、機能します。そのため、マップなどのより複雑なデータ構造をバインドすると問題が発生します。マップをバインドする方法を説明しているドキュメントには何も見つかりませんでした。

4

1 に答える 1

2

警告: 私は Ember を初めて使用します。

Ember.Map の実装を見ると、現在 (1.0.0-pre2 では) これができないと思います。Ember.Map はcreateget、および を実装していますが、通常の Ember オブジェクトsetではありません。とりわけ、マップ内の「プロパティ」は実際にはプロパティではなく、オブザーバブルのサポートはありません。ハンドルバーの実装は監視可能なサポートに大きく依存しているため、あなたがしていることはうまくいかないと思います。

私が間違っている場合は誰かが私を修正しますが、これは私が 1.0.0-pre2 コードで見ているものです:

var Map = Ember.Map = function() {
  this.keys = Ember.OrderedSet.create();
  this.values = {};
};

/**
  @method create
  @static
*/
Map.create = function() {
  return new Map();
};

Map.prototype = {
  /**
    Retrieve the value associated with a given key.

    @method get
    @param {anything} key
    @return {anything} the value associated with the key, or undefined
  */
  get: function(key) {
    var values = this.values,
        guid = guidFor(key);

    return values[guid];
  },
...

つまり、Ember.Object を拡張するのではなく、独自のget(および) を実装しているため、観察可能なサポートはありません。createあとだったら見逃していたかもしれないreopenけど。

編集:

また、実際にはあなたが尋ねたものではありませんが、何らかのキーの存在に依存するインターフェイスを構築している場合は、これらのキーをプロパティとして持つ独自のモデル クラスを定義する必要があります。それらが「設定されていない」場合でも、それらを null に設定できます。任意のキーを設定する機能も必要な場合は、プロパティの 1 つを Ember.Map にして、それotherPropertiesまたは何かを呼び出して、そこに配置します。ただし、ビューが既知のキーに依存している場合は、定義済みのプロパティにする必要があります。

于 2013-01-07T10:06:44.300 に答える