我正在设置一个页面,我的用户可以在其中添加orgLanguage
,如果这是第一个添加的orgLanguage
,我想要显示特殊消息。我能够让我的代码正常工作,但它确实看起来很难看,而且我想知道是否有更好的方法来处理这个问题?
首先,这是我的Handelbars模板:
把手模板(简体):
{{#if isFirstOrgLanguage}}
...display some content
{{/if}}
该变量在我的控制器上定义如下。
控制器(简体):
export default Ember.ObjectController.extend({
isFirstOrgLanguage: function() {
// the 'orgLanguages' controller property is set in the route
var orgLanguagesPromiseArray = this.get('orgLanguages');
return orgLanguagesPromiseArray.then( function() {
var orgLanguagesRecordArray = orgLanguagesPromiseArray.get('content');
var orgLanguagesArray = orgLanguagesRecordArray.get('content');
return orgLanguagesArray ? orgLanguagesArray.length === 1 : true;
});
}.property('orgLanguages')
}
我已将变量命名为我收到的数据类型。您将注意到这是一个计算属性,它依赖于我的路由上设置的控制器属性,如下所示。
路线(简化):
setupController: function (controller, model) {
this._super(controller, model);
controller.set('orgLanguages', this.store.find('org-language') );
},
最后,如果isFirstOrgLanguage
为真,我想在此Handlebars模板上调用一些基本的jQuery,所以我按如下方式设置我的视图。
查看:
export default Ember.View.extend({
didInsertElement: function() {
this.get('controller').get('isFirstOrgLanguage').then( function( isFirstOrgLanguage ) {
console.log('isFirstOrgLanguage', isFirstOrgLanguage);
});
}
});
这似乎是一个疯狂的承诺和异步管理只是为了回答这个问题"是否正好定义了1个orgLanguage"?虽然上面的工作,有一个更简单的方法,或者可能" Ember Way"这样做?
更新 在做一些额外的研究时,似乎这是一个争论的话题。以下是我在此看到的相关讨论。如果我确定我喜欢的模式,我会将其作为答案发布,但欢迎其他建议。
答案 0 :(得分:2)
我想发布我最终如何解决这个问题。
首先,很明显有这种模式的推荐解决方案,但没有"一种真正的方式"。请参阅http://discuss.emberjs.com/t/the-right-way-to-load-additional-models-to-build-filtering-checkboxes/4966/4。
我最终使用的是:
<强>路线:强>
...
afterModel: function() {
var _this = this;
Ember.RSVP.hash({
languages: this.store.find('language'),
orgLanguages: this.store.find('org-language')
}).then( function( hash ) {
_this.set('controller.languages', hash.languages );
_this.set('controller.orgLanguages', hash.orgLanguages );
});
},
...
这里的主要见解是:
this.store.find()
进行承诺,那么最好解决路线中的承诺然后将具体的#34;属性传递给您的控制器。但请记住,当他们最终解决时,您的模板将呈现这些值!所以,再次出现是一个辩论的空间。我认为一般的看法是Ember为您提供了很多选择,并根据您的需求提供了大量的使用方法。