'这'在ember.js链接到帮助器

时间:2014-04-06 06:29:28

标签: javascript ember.js handlebars.js

我正在努力获得流行的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,但我的问题是:

  1. 是否与App.ProductRouterouter互动?如果是的话怎么样?
  2. 我们可以将this替换为this.title吗?

1 个答案:

答案 0 :(得分:0)

  1. 是的,link-to助手可以。 link-to帮助程序根据您提供的信息构建URL。使用路由名称,它会查找路由器中定义的路由并使用您指定的路径。然后它使用来自对象的ID来填充动态段。如有必要,它还确保正确填写父路线。

  2. 不,您需要使用this,因为它需要id来构建网址。您过去只能传递this.id,但我认为您不能再这样做了。 (无论如何,这都是一个坏主意。)此外,Ember.js将使用您传递它的对象作为路线的模型,从而跳过model中的ProductRoute钩子。您传递的对象可以是完全加载的模型,也可以是模型的承诺。