我是ember的新手并且遇到了模板问题。
我的路线
import Ember from 'ember';
import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
export default Ember.Route.extend(AuthenticatedRouteMixin, {
model: function(params) {
var pageNum = params.page || 1,
pageRows = 8;
return this.store.find('account', {
page: pageNum,
rows: pageRows
});
},
setupController: function(controller, model) {
controller.set('model', model);
controller.set('greeting', 'Hello World');
}
});
我的控制器
import Ember from 'ember';
export default Ember.ArrayController.extend({
contentLength: function() {
// console.log(this);
// console.log('length: ' + this.get('content').length);
// return this.get('content').length;
return 'Test string';
},
actions: {}
});
模板
{{ greeting }}
{{ contentLength }}
{{greeting}}被正确呈现。但是{{contentLength}}被渲染为字符串函数..
Hello World function () { // console.log(this); // console.log('length: ' + this.get('content').length); // return this.get('content').length; return 'Test string'; }
有谁可以帮我解决这个问题?
由于
答案 0 :(得分:1)
您需要在.property()
功能的末尾添加contentLength
才能在模板中显示它:
import Ember from 'ember';
export default Ember.ArrayController.extend({
contentLength: function() {
// console.log(this);
// console.log('length: ' + this.get('content').length);
// return this.get('content').length;
return 'Test string';
}.property(),
actions: {}
});
如果您希望在控制器的其他属性发生更改时更新属性,只需将其添加为属性的“参数”,如此.property("thepropertytoobserve")
,并且arrayController的length属性已经可用{{1}在模板中。
有关计算机属性的更多详细信息,请查看doc。
答案 1 :(得分:1)
您可以在模板中使用{{ length }}
,因为ArrayControllers已经拥有该属性。
你的contentLength
函数没有做你想要的是因为它不是计算属性。您需要使用Ember.computed(function() { ..})
或将.property(...)
附加到contentLength
功能。
例如:
contentLength: function() {
return this.get('content.length');
}.property('content.length')