我正在努力获得流行的ember.js
框架的实践经验,并对很多神奇的东西感到惊讶。
其中一个是this
link-to
车把手,我无法消化。
以下是我的代码方案:
// handlebar script
<script type='text/x-handlebars' data-template-name='products'>
<h1>Products</h1>
<ul class='list-unstyled col-md-8'>
{{#each}}
<h2>{{title}}</h2>
<p>{{#link-to 'product' this class='btn btn-success' }}Buy for ${{price}}{{/link-to}}</p>
{{/each}}
</ul>
</script>
// in app.js
App.PRODUCTS = [
{
title: 'Chair',
price: 99,
description: 'Chair is...',
},
...
];
App.Router.map(function() {
this.resource('products');
this.resource('product', { path: '/products/:title'});
});
App.ProductsRoute = Ember.Route.extend({
model: function() {
return App.PRODUCTS;
}
});
App.ProductRoute = Ember.Route.extend({
model: function(params) {
return App.PRODUCTS.findBy('title', params.title);
}
});
我发现this
在模板中引用current product
,但我的问题是:
App.ProductRoute
或router
互动?如果是的话怎么样?this
替换为this.title
吗? 答案 0 :(得分:0)
是的,link-to
助手可以。 link-to
帮助程序根据您提供的信息构建URL。使用路由名称,它会查找路由器中定义的路由并使用您指定的路径。然后它使用来自对象的ID来填充动态段。如有必要,它还确保正确填写父路线。
不,您需要使用this
,因为它需要id
来构建网址。您过去只能传递this.id
,但我认为您不能再这样做了。 (无论如何,这都是一个坏主意。)此外,Ember.js将使用您传递它的对象作为路线的模型,从而跳过model
中的ProductRoute
钩子。您传递的对象可以是完全加载的模型,也可以是模型的承诺。