【问题标题】:Ember defining model in route causing errorEmber 在路由中定义模型导致错误
【发布时间】:2014-08-31 21:33:53
【问题描述】:

我对 Ember 很陌生,我正在尝试设置一个模板来显示有关外部模型(产品)的信息。所以我有一个管理路线:

App.AdminRoute = Ember.Route.extend({
    model: function() {
        var admin_brand = this.store.find('brand', 1);
        return this.store.find('product', {brand: admin_brand});
    }
});

控制器:

App.AdminController = Ember.ArrayController.extend({

});

和模板:

<script type="text/x-handlebars" data-template-name="admin">
    <div class="row">
        {{#each}}
            {{name}}
        {{/each}}
    </div>
</script>

但是我收到了一个 JS 错误:

Error while processing route: admin undefined is not a function TypeError: undefined is not a function

我还在为我的实际数据使用 ember-data-django-rest-adapter(否则它似乎工作正常)。如果我在路由中传递一个静态对象数组,它可以正常工作。关于我做错了什么的任何想法?另外,这甚至是正确的方法吗?最后,有没有更好的方法来调试这些类型的问题?我有 Chrome 扩展程序,但它似乎对这些极其一般的错误没有帮助,所以任何其他提示都会很棒。非常感谢您的帮助。

【问题讨论】:

    标签: django ember.js django-rest-framework


    【解决方案1】:

    假设您使用的是 ember 数据...

    问题是对this.store.find('brand', 1) 的调用返回的是一个promise,而不是一个值。为了在调用this.store.find('product', {brand: admin_brand}) 时使用该值,您需要使用.then() 来访问解析的值。

    这样的事情应该可以工作。

    App.AdminRoute = Ember.Route.extend({
        model: function() {
            var self = this;
            return self.store.find('brand', 1).then(function(admin_brand){
                return self.store.find('product', {brand: admin_brand})
            });
        }
    });
    

    【讨论】:

    • 谢谢你,这样肯定更有意义,但不幸的是我仍然遇到错误(无论如何都是一个新错误)。 Error while processing route: admin Cannot read property 'find' of undefined TypeError: Cannot read property 'find' of undefined 在 find('product') 上。在这种情况下,我是否需要在控制器或模板中做任何特定的事情?经过更多挖掘后,我认为可能还有其他问题导致问题(查看 ember 调试器,我的产品对象并不总是存在,但在访问 product/1 后,它们确实被添加到调试器中)
    • 该问题是范围问题。我修复了答案中的代码以使用self 而不是this。用上面的代码试试看是否有效。
    • 啊是的,这也有道理,不幸的是我遇到了一个新错误:Error while processing route: admin Maximum call stack size exceeded RangeError: Maximum call stack size exceeded at encodeURIComponent (native)
    • hmm...任何能够使用emberjs.jsbin.com 重现错误的机会
    • 我正在尝试做一个,但我不确定创建一些虚拟模型实例的最佳方法。如果有帮助的话,这里是垃圾箱:jsbin
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多