我是ember. js和enpe-cli的新手,在我尝试创建我的第一个自定义助手之前,一切都很顺利。
我正在尝试遍历模型,在页面内的多行上显示一些图像缩略图。
一切似乎工作正常,但我想尝试绑定链接。
这是我的定制助手:
import Ember from "ember";
export default Ember.Handlebars.makeBoundHelper(function(value, options) {
var out = '';
var b = 0;
for (var i=0; i<value.length; i++) {
b++;
if(b === 1){
out += '<div class="row">';
}
out += '<div class="col-md-4 col-sm-6 col-xs-12 center" style="text-align:center;">\
<div class="row center">\
<div class="col-md-12 center">\
<a href="photo/'+value[i]._data.id+'">\
<img class="center" src="'+value[i]._data.thumb_url+'" />\
</a>\
</div>\
</div>\
<div class="row center">\
<div class="col-md-6">'+value[i]._data.status+'</div>\
<div class="col-md-6"></div>\
</div>\
</div>';
if(b === 3){
out += '</div><div class="row"><div class="col-md-12"> </div></div>';
b=0;
}
}
return new Handlebars.SafeString(out);
});
我知道你不能在助手中直接使用链接,所以我一直在玩不同的选项,运气不好。
我最成功的尝试是手动运行link to,使用以下内容:
Ember.Handlebars.helpers.linkTo.call('photo/1', 'photo.index', options);
但这对我也没有用。
-有什么建议吗?-恐怕我的方法完全错了
编辑
我试图通过助手实现的输出示例
<div class="row">
<div>
<a link><img></a>
</div>
<div>
<a link><img></a>
</div>
<div>
<a link><img></a>
</div>
</div>
<div class="row">
<div>
<a link><img></a>
</div>
<div>
<a link><img></a>
</div>
<div>
<a link><img></a>
</div>
</div>
您可能应该创建一个Ember组件,而不是创建一个车把助手。使用Ember组件,您可以使用{{#linkTo}}
并且所有绑定都可以工作。
使用Ember组件创建一个虚拟属性row
,您可以在其中设置每一行的项目;然后您可以在组件模板中使用常规{{#each}}
遍历行和项目。
组件代码如下所示:
App.SampleComponentComponent = Ember.Component.extend({
rows : function() {
var myRows = [];
var elements = this.get('model');
var b = -1;
for(var i = 0; i<elements.length; i++) {
if(i % 2 === 0) {
b++;
myRows[b] = [];
}
myRows[b][i%2] = elements[i];
}
return myRows;
}.property('model'),
});
组件模板如下所示:
<ul>
{{#each row in rows}}
<li>
<ol>
{{#each item in row}}
<li>{{item}}</li>
{{/each}}
</ol>
</li>
{{/each}}
</ul>
您必须将项目数组传递给model
参数中的组件。
工作示例:http://emberjs.jsbin.com/cowin/3/
http://emberjs.com/guides/components/的教程应该会有帮助。