如何将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)时会出现问题。我在文档中找不到任何解释如何绑定地图的内容。
答案 0 :(得分:2)
看看Ember.Map的实现,我认为你现在不能(在1.0.0-pre2中)这样做。 Ember.Map实现create
,get
和set
,但是不是正常的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
或其他内容,并将其放入其中。但是,如果您的视图依赖于已知密钥,则它应该是已定义的属性。