Ember.js从列表中选择模型属性的值

时间:2014-11-28 10:28:28

标签: ember.js

我的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视图不能像我一样操纵同一个模型吗?更重要的是,我无法从这种方法中获得任何有用的东西。

有人可以推荐一种方法来填充像这样的选择视图吗?我这样做的方式感觉非常奇怪,而且它似乎无论如何都不起作用。第二:如果你总是有过时的参考或没有参考,你应该如何操纵模型?我觉得我在这里错过了一些大事。

1 个答案:

答案 0 :(得分:0)

正如blessenm所说,我自己发现:为了触发更改,我必须在Controller上使用'set'。 (在模型上似乎不起作用)。要获得数据的更新版本,我必须使用'get'。