ember js params存在

时间:2018-02-17 19:31:07

标签: javascript ember.js

所以我需要这样做,点击商店会停止带有商店商品的页面。当通过链接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),

1 个答案:

答案 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以及您可能使用的商店详细信息路线。祝你好运!

其他说明:

  • ember-data使用名为isNew的属性作为记录 - 因此,您可能想要为您正在做的事情想出一个不同的名称/