我的Ember应用程序中有一套相当复杂的模型:
当我创建一个新设备时,我有一个尚未创建的设备的临时模型。此模型将所有数据和副本收集到设备模型中。这是为了确保所有设备模型在内部一致。
在临时模型的控制器内部,我必须列出用户可以选择的所有可能的操作系统。选择此选项后,我必须填写操作系统版本列表,这些操作系统版本与所选操作系统相对应。
我的临时模型视图模板如下所示:
{{查看Ember.Select
prompt="Please select an OS" content=osClasses value=osClass class="form-control" id="select-os" optionLabelPath="content.name"
}}
我已尝试在我的控制器中进行设置,以便填充数组osClasses
,执行以下操作:this.model["osClasses"] = this.store.find("osClass");
然而,似乎存在某种异步性,因为这个选择框仅在某些时候填充,而其他时候我遇到崩溃,看起来像是:
TypeError: end is null ember.js:42709
(我怀疑这可能与其他地方显示的设备列表有关)
有没有某种令人敬畏的方法来处理任何异步问题?
其次,一旦我实际选择了操作系统,我想填充操作系统版本的数组(以及选择视图)。我在我的控制器中试过这样的东西: >
模型:{ 名称:"新设备", osClass:undefined, osVersion:undefined, osClasses:[] },
onOsClassChanged:function(){
。console.log("NewDeviceController.onOsClassChanged()"); if(this.model["osClass"]) this.model["osVersion"] = this.model["osClass"].latest; else console.log("osClass is not")
}观察(" osClass&#34),
在这个例子中,我甚至没有尝试填充第二个阵列,而只是想选择给定操作系统的最新操作系统版本。正如我所料,这个函数触发,但它始终记录osClass is not
,并没有真正做我想要的。大概这意味着Select视图不能像我一样操纵同一个模型吗?更重要的是,我无法从这种方法中获得任何有用的东西。
有人可以推荐一种方法来填充像这样的选择视图吗?我这样做的方式感觉非常奇怪,而且它似乎无论如何都不起作用。第二:如果你总是有过时的参考或没有参考,你应该如何操纵模型?我觉得我在这里错过了一些大事。
答案 0 :(得分:0)
正如blessenm所说,我自己发现:为了触发更改,我必须在Controller上使用'set'。 (在模型上似乎不起作用)。要获得数据的更新版本,我必须使用'get'。