在 Ember 中创建依赖于另一个对象的新数据对象时,您如何传递它?
When creating a new data object in Ember that relies on another object how do you pass it along?
我在一个可以看到特定客户的页面上,我的 router.js 的一部分是:
this.route('customers');
this.route('customer', {path: "customers/:customer_id"});
this.route('customer.order.create', { path: "customers/:customer_id/order/create" });
customer.order.create 需要在我的主视图中加载,因此没有嵌套。一个订单 'has a' 客户。
我已经将我的 /customer/order/create 控制器设置为
needs: "customer"
我想在我的 /customer/order/create.hbs 模板中访问客户,如下所示:
<h3>New Order for {{controllers.customer.name}}</h3>
当我最终创建订单时,我还想设置 newOrder.customer = customer
。
customer.hbs 这样的链接
<div>
{{#link-to 'customer.order.create' model}}Create Order{{/link-to}}
</div>
目前 {{controllers.customer.name}}
什么都没有呈现,我在 order/create 路线中缺少哪一块拼图才能到达客户?
或者更笼统地说,当我在 /parentObject/parent_id/childObject/create 类型的场景中有一个属于我的子对象的父对象时,我需要什么 route/controller/etc 代码。
您应该能够从商店吸引顾客。试试下面的代码:
路线:
export default Ember.Route.extend({
model: function(params) {
return Ember.RSVP.hash({
customer: this.store.find('customer', params.customer_id)
});
}
});
控制器:
export default Ember.Controller.extend({
customer: Ember.computed.alias('model.customer')
});
它应该可以在您的模板中作为 customer
直接访问,如下所示:
<h3>New order for {{customer.name}}</h3>
有很多地方需要修正:
1) {{controllers.customer}}
是控制器对象,{{controllers.customer.name}}
是名称 属性。我想你想要 {{controllers.customer.model.name}}
.
2) “..newOrder.customer = 客户..”应该是
newOrder.set('customer', this.get('controllers.customer.model'));
3) 你的 customer.order.create
路由 model
钩子不应该是空的,因为你使用的是动态段 customer_id
:
//route
model: function(params) {
return this.find('customer', params.customer_id);
}
4) 您的路线未嵌套,因此如果您的 customer
路线未激活,{{controllers.customer.model.name}}
将为空。所以你应该使用: {{model.name}}
而不是 {{controllers.customer.model.name}}
当你点击link时,你直接传递了模型,并且model
钩子没有被触发,所以一切看起来都很好。当您直接访问 url 时,会触发 model
挂钩。如果它是空的,你什么也看不到。
一般概念:是依赖注入的概念,你可以看这里:http://guides.emberjs.com/v1.12.0/understanding-ember/dependency-injection-and-service-lookup/
我将 needs: "customer"
更改为 needs: ["customer"]
,然后在我的模板中使用了 {{model.name}}
。似乎需要一个字符串数组而不仅仅是一个字符串,在我修复 Ember 之后比较其余的而不需要创建 /customers/order/create.js 路由。
如果您不想处理所有问题,请参阅 Artych 的回答以获得更完整的答案。
我在一个可以看到特定客户的页面上,我的 router.js 的一部分是:
this.route('customers');
this.route('customer', {path: "customers/:customer_id"});
this.route('customer.order.create', { path: "customers/:customer_id/order/create" });
customer.order.create 需要在我的主视图中加载,因此没有嵌套。一个订单 'has a' 客户。
我已经将我的 /customer/order/create 控制器设置为
needs: "customer"
我想在我的 /customer/order/create.hbs 模板中访问客户,如下所示:
<h3>New Order for {{controllers.customer.name}}</h3>
当我最终创建订单时,我还想设置 newOrder.customer = customer
。
customer.hbs 这样的链接
<div>
{{#link-to 'customer.order.create' model}}Create Order{{/link-to}}
</div>
目前 {{controllers.customer.name}}
什么都没有呈现,我在 order/create 路线中缺少哪一块拼图才能到达客户?
或者更笼统地说,当我在 /parentObject/parent_id/childObject/create 类型的场景中有一个属于我的子对象的父对象时,我需要什么 route/controller/etc 代码。
您应该能够从商店吸引顾客。试试下面的代码:
路线:
export default Ember.Route.extend({
model: function(params) {
return Ember.RSVP.hash({
customer: this.store.find('customer', params.customer_id)
});
}
});
控制器:
export default Ember.Controller.extend({
customer: Ember.computed.alias('model.customer')
});
它应该可以在您的模板中作为 customer
直接访问,如下所示:
<h3>New order for {{customer.name}}</h3>
有很多地方需要修正:
1) {{controllers.customer}}
是控制器对象,{{controllers.customer.name}}
是名称 属性。我想你想要 {{controllers.customer.model.name}}
.
2) “..newOrder.customer = 客户..”应该是
newOrder.set('customer', this.get('controllers.customer.model'));
3) 你的 customer.order.create
路由 model
钩子不应该是空的,因为你使用的是动态段 customer_id
:
//route
model: function(params) {
return this.find('customer', params.customer_id);
}
4) 您的路线未嵌套,因此如果您的 customer
路线未激活,{{controllers.customer.model.name}}
将为空。所以你应该使用: {{model.name}}
而不是 {{controllers.customer.model.name}}
当你点击link时,你直接传递了模型,并且model
钩子没有被触发,所以一切看起来都很好。当您直接访问 url 时,会触发 model
挂钩。如果它是空的,你什么也看不到。
一般概念:是依赖注入的概念,你可以看这里:http://guides.emberjs.com/v1.12.0/understanding-ember/dependency-injection-and-service-lookup/
我将 needs: "customer"
更改为 needs: ["customer"]
,然后在我的模板中使用了 {{model.name}}
。似乎需要一个字符串数组而不仅仅是一个字符串,在我修复 Ember 之后比较其余的而不需要创建 /customers/order/create.js 路由。
如果您不想处理所有问题,请参阅 Artych 的回答以获得更完整的答案。