gpt4 book ai didi

ember.js - 如何初始化 Controller 的计算属性以在 Ember 中建模?

转载 作者:行者123 更新时间:2023-12-02 22:20:13 25 4
gpt4 key购买 nike

我在返回数组的 Ember Controller 上定义了一个计算属性 myArray。该数组应初始化为 model 的内容,然后根据用户输入的查询过滤 model 来重新计算。

myArray: function() {
// return a value that filters model with query
}.property('model', 'query')

问题是我不知道如何同时做这两件事。以下代码无法将 myArray 初始化为 model;我猜测是因为模型是异步加载的,并且 init() 在完成之前运行。

// doesn't work
init: function() {
this._super();
this.set('myArray', this.get('model'));
}

所以我认为 setupController() 是设置它的地方,但我发现在那里设置 myArray 导致过滤器更新不起作用,也许是因为我正在覆盖定义。

// route definition...
setupController: function(controller, model) {
controller.set('model', model);
controller.set('myArray', model); // breaks updating
}

我怎样才能实现我的目标?

最佳答案

您想要一个取决于模型的计算属性 - 您不必初始化它,它只需要返回正确的东西即可。

// untested, just to show the idea
myArray: function() {
var query = this.get('query');
var model = this.get('model');

if (query)
return doSomethingWith(model, query);
else
return model;
}.property('model', 'query')

由于它是一个属性,因此初始化和更新将自行进行。

也就是说,Twitter 的传统是不鼓励使用 .property,最好使用 Ember.compulated

// untested, just to show the idea
myArray: Ember.computed('model', 'query', function() {
var query = this.get('query');
var model = this.get('model');

if (query)
return doSomethingWith(model, query);
else
return model;
})

这只是另一种编写方式,从长远来看可能更经得起 future 的考验。

关于ember.js - 如何初始化 Controller 的计算属性以在 Ember 中建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29485663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com