【问题标题】:Ember's transitionToRoute slug with a new entityEmber 的带有新实体的 transitionToRoute slug
【发布时间】:2014-08-12 19:16:16
【问题描述】:

这是我的路由器:

this.resource('catalog', function(){
    this.route('products'),
    this.route('product', {path: 'product/:id'})
});

catalog/products 是所有产品的概览。如果单击一个产品,您将转换为catalog/product/123,而123 是产品的ID。在概览中还有一个New product 按钮,您可以在其中创建新产品。在我的代码中,此按钮后面有以下转换:

actions: {
    new: function(){
        this.transitionToRoute('catalog.product', null);
    }
}

当时的 URL 是:catalog/product/undefined,我认为一切都很好,因为没有 id,因为这个产品是新的,稍后会保存。但是我的setupControllerCatalogProductRoute 的说法不同:

setupController: function(controller, model){
    var productId = model.id;
    if(productId){
        console.log('product exists with id: ' + productId);
    } else {
        console.log('product does not exist');
    }
}

不幸的是,productId 的值是 undefined,因此第一个 if 子句为真,但我认为它类似于 null,因为我在 transitionToRoute 中交出了 null。我该如何解决这个问题?我做错了什么?

【问题讨论】:

    标签: url ember.js controller entity slug


    【解决方案1】:

    空模型在未来可能会出现问题。在查看产品和创建产品之间很好地分离关注点可能会更好。

    您可能会考虑将路由器更改为以下内容:

    this.resource('catalog', function(){
        this.resource('products', function(){
          this.route('product', {path: ':id'})
          this.route('create');
        }),
    });
    

    那么当你创建的时候,你就在这个端点上:

    /products/create
    

    示例:http://emberjs.jsbin.com/OxIDiVU/701/edit

    【讨论】:

    • Mh...为此创建一个新的控制器和路由有什么问题?为什么?有很多框架可以在同一控制器功能中处理实体的创建和编辑(= 视图)。如果给出或没有给出 id,它们会在两种情况下分开。此外,我认为我在某处读到 null 可能会出现这种情况......他们改变了吗?
    • @tester 在这种情况下,您应该尝试摆脱过去的经验并遵循这种模式。它将正确构建您的基本资源集合,然后是您的网址。例如products/1(这是“产品”路线)、products/createproducts/delete
    • 我真的是在说创建与查看。 Ember 让分享作品变得如此简单,对我来说似乎并不习惯。我真的很惊讶你的代码没有崩溃 :) 如果模型未定义,var productId = model.id; 应该会破坏块。
    • 好的,但这对我来说似乎很奇怪。我的意思是,如果我不想仅将特殊 URL 用于创建/删除等,该怎么办? :-)
    • 您始终可以以编程方式设置模型,而不是让它成为 url 的一部分。这只是意味着您传递了一个 url,或者为 url 添加书签会被破坏。
    猜你喜欢
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    相关资源
    最近更新 更多