Ember.js 余烬模板将函数呈现为字符串
我是ember的新手,在模板方面遇到了问题 我的路线Ember.js 余烬模板将函数呈现为字符串,ember.js,handlebars.js,Ember.js,Handlebars.js,我是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 =
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');
}
});
{{ greeting }}
{{ 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';
},
actions: {}
});
模板
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');
}
});
{{ 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'; }
谁能帮我解决这个问题
谢谢您需要在
contentLength
函数的末尾添加.property()
,以便在模板中显示它:
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属性在模板中已可用为{length}
有关computerd属性的详细信息,请查看。您可以在模板中使用
{{length}
,因为ArrayController已经具有该属性
contentLength
函数未执行所需操作的原因是它不是计算属性。您需要在contentLength
函数中使用Ember.computed(function(){..})
或附加.property(…)
例如:
谢谢它起作用了。我有点沮丧,你不能只添加自定义的东西来显示在模板中。但也许我只是在错误的地方定义它?无论如何,添加.property('modelName')似乎就可以了。谢谢。你能解释一下为什么会有这种行为吗?对我来说,这似乎违反直觉。但这可能只是我对余烬的有限理解,这是为了区分计算属性和余烬对象函数。计算出的属性为优化添加了一些缓存。第一次呈现属性时执行函数,第二次仅从缓存返回信息,除非观察到的值之一发生更改。我建议您在计算属性和ember文档中的观察者上检查文档,这是ember中的一些强大机制