加载路径时出错:TypeError:undefined不是函数

Jad*_*eye 5 ruby local-storage ember.js ember-data ubuntu-12.04

我真的希望来自emberjs团队的人能够读到这一点.

我是一位经验丰富的程序员,使用多种语言.

&AFA ember关注的是,它不是学习曲线,也不是缺乏知识和教程,而是我认为它的框架和开发环境的来源不断变化,消耗了大量的时间,精力和精力,试图当各种SO问题和谷歌引用框架的不同/旧版本时,弄清楚出了什么问题.

我发现需要某种配置图表,其中包含什么以及如何配置您的开发环境是必要的.

有很多答案并不一定指向正确的方向,很难描述,但我觉得文档在框架向前运行时落后了.

我浏览了所有JoséMota的精彩教程,在构建实际书签应用程序的最后阶段,我遇到了很多问题,学习emberjs不是主要问题,而是大部分时间消耗的基础设施.

它从ruby版本开始,在ubuntu 12.04上管理这些,ruby的ember-data依赖项(仅用ruby 1.9编译),localstorage_adapter.js以及如何在ember中使用它... github页面上给出的示例不起作用.

配置:
ubuntu 12.04.4 ember 1.4.1 + pre.af87bd20 jquery-1.9.1 handlebars-v1.3.0 ember-data 1.0.0-beta.7.f87cba88 ruby​​ 1.9.2p290

何塞·莫塔的伟大tutsplus当然 因此,这里是我的问题:

Error while loading route: TypeError: undefined is not a function
at App.BookmarksNewRoute.Ember.Route.extend.model (http://localhost:8000/js/app/routes/bookmarks_new.js:3:23)
at superWrapper [as model] (http://localhost:8000/js/vendor/ember.js:1239:16)
Run Code Online (Sandbox Code Playgroud)

应用程序代码(我会尽量明确):

路线

filename:bookmarks_new.js

App.BookmarksNewRoute = Ember.Route.extend({
model: function() {
    return App.Bookmark.createRecord();
}
Run Code Online (Sandbox Code Playgroud)

})

楷模

filename:bookmark.js

App.Bookmark = DS.Model.extend({
title: DS.attr("string"),
url: DS.attr("string")
Run Code Online (Sandbox Code Playgroud)

})

filename:router.js

App.Router.map(function () {
    this.resource("bookmarks", function(){
    this.route("new");
    });
});
Run Code Online (Sandbox Code Playgroud)

filename:store.js

(1)
App.Store = DS.Store.extend({
revision: 14,
adapter: DS.LSAdapter
});
(2)
App.Store = DS.Store.extend();
App.ApplicationAdapter = DS.LSAdapter;
(3)
App.Store = DS.Store.extend();
App.ApplicationAdapter = DS.LSAdapter.extend({
    namespace: 'bookmarks'
});
(4)
App.ApplicationSerializer = DS.LSSerializer.extend();
App.ApplicationAdapter = DS.LSAdapter.extend({
  namespace: 'bookmarks'
});
Run Code Online (Sandbox Code Playgroud)

1号和4号工作,但哪一个是合适的?在SO或谷歌不同的答案中找到的数字2,3,以解决不同的人的问题.

控制器

filename:bookmarks.js

App.BookmarksController = Ember.ArrayController.extend();
Run Code Online (Sandbox Code Playgroud)

filename:bookmarks_new.js

App.BookmarksNewController = Ember.ObjectController.extend({
save: function() {
    this.get("model.transaction").commit();
    // this.get("model").get("transaction").commit(); // similiar
    this.get("router").transitionTo("bookmars");
}
});
Run Code Online (Sandbox Code Playgroud)

的index.html

**这里是上诉(也是通过找出另一个人的问题),脚本放在inbdex.html中的顺序至关重要:

<script type="text/javascript" src="js/vendor/jquery-1.9.1.js"></script>
<script type="text/javascript" src="js/vendor/handlebars-v1.3.0.js"></script>
<script type="text/javascript" src="js/vendor/ember.js"></script>
<script type="text/javascript" src="js/vendor/ember-states.js"></script>
<script type="text/javascript" src="js/vendor/ember-data.js"></script>

<script type="text/javascript" src="js/app/app.js"></script>
<script type="text/javascript" src="js/app/router.js"></script>
<script type="text/javascript" src="js/vendor/localstorage_adapter.js"></script>
<script type="text/javascript" src="js/app/store.js"></script>

<script type="text/javascript" src="js/app/controllers/bookmarks.js"></script>
<script type="text/javascript" src="js/app/controllers/bookmarks_new.js"></script>

<script type="text/javascript" src="js/app/models/bookmark.js"></script>

<script type="text/javascript" src="js/app/routes/bookmarks_new.js"></script>
Run Code Online (Sandbox Code Playgroud)

最后是标记

<script type="text/x-handlebars" data-template-name="bookmarks">
    <h2>All my Bookmarks</h2>
    <table>
        <thead>
            <tr>
                <th>Title</th>
                <th>URL</th>
            </tr>
        </thead>

        <tbody>
            {{#each controller}}
            <tr>
                <td>{{title}}</td>
                <td>{{url}}</td>
            </tr>
            {{else}}
            <tr>
                <td>U have No bookmarks</td>
            </tr>
            {{/each}}
        </tbody>
    </table>
    {{#link-to "bookmarks.new"}}Add new bookmark{{/link-to}}
    {{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="bookmarks/new">
    <h3>New Bookmark</h3>
    <form {{action "save" on="submit"}}>
        <p>
            {{view Ember.TextField valueBinding="title" placeholder="type in a title"}}
        </p>
        <p>
            {{view Ember.TextField valueBinding="url" placeholder="type in a URL"}}
        </p>
        <p>
            <button>Create Bookmark</button>
        </p>
    </form>
</script>
Run Code Online (Sandbox Code Playgroud)

好的,所以点击"添加新书签"会产生上述错误.

为什么??

谢谢你的时间...... embereres ...

如果您发现任何信息丢失,请告诉我.

Joa*_*eie 0

每当我遇到这些问题时:

Error while loading route: TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)

它通常意味着:

  • 您的路线之一的模型函数不返回任何内容(缺少 return 语句)
  • 您要求的模型不存在
  • 你的 XHR 一路失败,因此 model() 函数返回 undefined

检查浏览器开发人员工具中的网络选项卡,以验证您是否获得了预期的回报数据。对于本地存储适配器,您需要检查是否获得了预期的结果。

编辑:也许我在今年早些时候的一次会议演示中录制的这个截屏视频也可能有所帮助:https://www.youtube.com/watch ?v=KH5RreHtaaQ