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但是,该值永远不会受到约束。请注意,最初地图是空的。这可能是问题的根源吗?

编辑:我还尝试在控制器中使用带有整数值的绑定并且它可以工作。因此,当我绑定更复杂的数据结构(例如 Map)时,问题就来了。我在解释如何绑定地图的文档中找不到任何内容。

4

1 回答 1

2

警告:我自己对 Ember 还很陌生。

查看 Ember.Map 的实现,我认为您目前(在 1.0.0-pre2 中)不能这样做。Ember.Map 实现create,getset, 但不是普通的 Ember 对象。因此,除其他外,地图中的“属性”并不是真正的属性,并且没有可观察的支持。车把的实现很大程度上依赖于可观察的支持,所以我认为你正在做的事情是行不通的。

如果我错了,有人纠正我,但这是我在 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];
  },
...

重点是,它实现了自己的get(和create)而不是扩展 Ember.Object ......所以没有可观察的支持。虽然如果reopen晚点什么的,我可能会错过它。

编辑:

此外,并不是您真正要求的,但是如果您正在构建一个依赖于某个键存在的接口,那么您真的应该定义您自己的模型类,该模型类具有这些键作为属性。如果它们“未设置”,您仍然可以将它们设置为 null。如果您还需要设置任意键的能力,请将您的属性之一设为 Ember.Map 并调用它otherProperties或其他东西,然后将它们放在那里。但是如果你的视图依赖于一个已知的键,它应该是一个定义的属性。

于 2013-01-07T10:06:44.300 回答