【问题标题】:Displaying a parent template in child template在子模板中显示父模板
【发布时间】:2013-12-22 18:19:55
【问题描述】:

我正在创建一个主视图 Cordova/javascript 应用程序,用户在该应用程序中显示产品列表,然后根据他们选择的内容,进入有关产品的基于选项卡的详细信息页面。每个选项卡将根据他们选择的产品生成。随着产品特定信息的加载,我仍然希望在视图中保留所有产品的列表,以便用户可以随时切换产品。这是一张图片,可以帮助更好地理解我在说什么。 。

我尝试使用 ember.js 来启动并运行它,但遇到了一些问题。我可以获得生成的产品的初始列表并切换到产品特定的详细信息,但是一旦我尝试在我的第二个模板中加载产品的主列表,一切都会中断。我知道在父模板中包含两个带有{{outlet}} 的模板,但我无法让子代继承父代。这可以在 ember 中完成还是我应该开始研究其他框架,如 Anuglar?任何帮助表示赞赏。

【问题讨论】:

    标签: javascript angularjs model-view-controller cordova ember.js


    【解决方案1】:

    在我看来,显示嵌套模板实际上是 Ember 优于其他框架的地方。

    使用嵌套资源应该非常简单。在您的路由器中,您可以执行类似的操作

    App.Router.map(function() {
      this.resource('products', function() {
        this.route('product', { path: '/product_id' });
      });
    });
    

    显然,您必须在每个相应的路线中获取数据。类似的东西

    App.ProductsRoute = Ember.Route.extend({
      model: function() {
        this.store.find('product');
      }
    });
    
    App.ProductsProductRoute = Ember.Route.extend({
      model: function(params) {
        this.store.find('product', params.product_id);
      }
    });
    

    在您的 product 模板中,您需要包含一个 {{outlet}} 以供所有要渲染到的子路由(即 products.product)。

    例如

    product.handlebars

    {{#each}}
      {{name}}
    {{/each}}
    
    {{outlet}}
    

    products/product.handlebars

    Product: {{id}}
    

    查看资源部分in the guides


    编辑

    如果您希望主列表在products 模板和products.product 模板之间显示不同,请从products 模板中删除主列表并将其放入products.index products.product 模板。

    然后指定 ProductsIndexControllerProductsProductController needs 其父模型。这将使两个模板都可以通过controllers.products 访问产品。

    App.ProductsIndexController = Ember.ObjectController.extend({
      needs: 'products',
      products: Ember.computed.alias('controllers.products')
    });
    
    App.ProductsProductController = Ember.ObjectController.extend({
      needs: 'products',
      products: Ember.computed.alias('controllers.products')
    });
    

    参见this jsbinassociated guides

    【讨论】:

    • 是的,我知道这种方法,这就是我选择使用 ember 的原因。但是您描述的方法是,如果我希望在整个应用程序中以相同的方式格式化主列表。对于我的产品模板,会有一种样式,而对于我的产品模板,它的样式会有所不同。因此,如果我尝试在我的第二个模板中加载数据,ember 会“混淆”它应该显示哪些数据并且不会加载两组数据。
    • 最后一个问题。我看到你添加了 ember 数据。这将是一项要求,还是只是您为了包含它而做出的选择?
    • ember-data 不需要此功能。要点是从需要访问所有产品的任何控制器中调用needs
    猜你喜欢
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多