所以我需要这样做,点击商店会停止带有商店商品的页面。当通过链接URL传递商店的ID时,但在产品的路径模型(params)中,参数是空的
型号名称(产品?)
import DS from 'ember-data';
import { empty } from '@ember/object/computed';
export default DS.Model.extend({
name: DS.attr('string'),
quantity: DS.attr('string'),
price: DS.attr('string'),
shops: DS.belongsTo('shop', {asynq: true}),
isNotValid: empty('name'),
});
型号名称(商店?)
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
address: DS.attr('string'),
phone: DS.attr('string'),
products: DS.hasMany('product',{asynq: true}),
});
控制器名称(?)
import Controller from '@ember/controller';
export default Controller.extend({
isNew: false,
actions: {
newProduct() {
this.toggleProperty('isNew');
},
cancelNewProducts() {
this.set('isNew', false);
},
addNewProduct() {
const name = this.get('name');
const quantity = this.get('quantity');
const price = this.get('price');
let shop = this.get('store').peekRecord('shop', );
let product = this.get('store').createRecord('product', { name,quantity,price });
shop.get('products').pushObject(product);
product.save().then( function() {
shop.save();
});
product.save().then( ()=> this.set('isNew',false));
},
},
});
路线名称(?)
import Route from '@ember/routing/route';
export default Route.extend({
model(params) {
console.log(params.shop_id);
return this.store.query('product', {shops:params.shop_id});
},
actions: {
deleteProduct(product) {
let confirmation = confirm('Are you sure?');
if (confirmation) {
product.destroyRecord();
}
},
editProducts(product) {
console.log(id)
product.set('isEditing', true);
},
cancelProductsEdit(product) {
product.set('isEditing', false);
product.rollbackAttributes();
},
saveProducts(product) {
if (product.get('isNotValid')) {
return;
}
product.set('isEditing', false);
product.save();
},
},
});
路由器
import EmberRouter from '@ember/routing/router';
import config from './config/environment';
const Router = EmberRouter.extend({
location: config.locationType,
rootURL: config.rootURL
});
Router.map(function() {
this.route('shops', function() {
this.route('new');
this.route('edit', { path: '/:shop_id/edit' });
});
this.route('products', { path: '/:shop_id/products' }); // this should be in the map, right?
}); // ?
export default Router;
我的问题是我无法向服务器发出请求并仅从具有可用ID的商店获取商品。但是当我点击任何商店时显示所有商品。我无法从控制器中的商店访问params(shop_id),
答案 0 :(得分:1)
我刚刚对您的程序进行了非常有创意的重新格式化。记下路由器。看起来那里有一些错误。此外,您还没有提供身份证明来查看'用。在你的控制器中。我们也不知道这些文件是如何连接的,或者它们的名称是什么。您应该在我的格式之上进行编辑以帮助澄清。 {async: true}
拼写为程序中的q
。
就你的问题而言......我会试着改写它。单词' store'令人困惑......因为数据'存储'我们习惯谈论。我想你的意思是说你有一个' shop'资源以及您想要点击的资源。在商店...(可能是每个循环中的一个组件)然后你说你想停止'带有商品(产品)的页面 - 所以...也许你的意思是' stock'或者'显示'那个商店的产品。这可能是在组件中(如果只有少数几个) - 或者你可以拍到一个细节'商店页面 - 显示该商店的所有产品。因为你提到params和ID,我认为你的意思是走细节路线。
这是我对你的问题的最佳猜测: "我有资源用于购物'和'产品。'我正在构建一个列出商店的UI。我想让商店可点击,点击后,转换到商店详细信息页面 - 我可以列出所有相关产品。我的链接帮助程序(此处未显示)包含商店ID - 但转换不成功,并且没有识别参数。我做错了什么?"
对于这个问题,你可能会在一个谜语中创建一个更简化的版本来深入了解问题。我们并不是真的需要大部分行动才能找到困惑的来源。
当你有一台服务器 - 或海市蜃楼服务器或任何你的设置时,很难显示这些东西。 Here's an example of the routing I would suggest - 带有一些基本的虚拟数据 - 在一个卑鄙的人物中。数据不是真正的ember对象/但是请参阅link-to
以及您可能使用的商店详细信息路线。祝你好运!
其他说明:
isNew
的属性作为记录 - 因此,您可能想要为您正在做的事情想出一个不同的名称/