Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js Requirejs2:如何处理自己的文件?_Backbone.js_Requirejs - Fatal编程技术网

Backbone.js Requirejs2:如何处理自己的文件?

Backbone.js Requirejs2:如何处理自己的文件?,backbone.js,requirejs,Backbone.js,Requirejs,我已经配置了requirejs来加载核心库(jquery、下划线、主干)。 现在,我想添加要异步加载的主干模型、控制器、视图等 我找到了很多关于这个主题的教程和很多“现成”的样板,不幸的是,我提到大多数方法都不受欢迎,或者相当复杂(即使有更好的方法) 一个例子是我如何为主libs配置requirejs: 那么,如何使用简单有效的Requirejs配置加载主干视图、模型、集合、路由器、控制器和模板呢 我听从了你的建议,但出现了一些奇怪的错误 main.js require.config({

我已经配置了requirejs来加载核心库(jquery、下划线、主干)。 现在,我想添加要异步加载的主干模型、控制器、视图等

我找到了很多关于这个主题的教程和很多“现成”的样板,不幸的是,我提到大多数方法都不受欢迎,或者相当复杂(即使有更好的方法)

一个例子是我如何为主libs配置requirejs:

那么,如何使用简单有效的Requirejs配置加载主干视图、模型、集合、路由器、控制器和模板呢

我听从了你的建议,但出现了一些奇怪的错误

main.js

require.config({
    paths: {
        jquery: 'vendors/jquery/jquery',
        underscore: 'vendors/underscore/underscore',
        backbone: 'vendors/backbone/backbone'
    },
    shim: {
        underscore: {
            exports: '_'
        },
        backbone: {
            deps: ['underscore', 'jquery'],
            exports: 'Backbone'
        }
    }
});

require(['app'], function(app){

});
app.js

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone){
    var Message = new Backbone.Model.extend({
        //idAttribute: '_id',
        //defaults: { body: '' }
        //url: function(){ return this.id ? '/messages/' + this.id : '/messages'; }
    });

    var newMessage = new Message({ body: 'hi' });
    newMessage.save();
});
app.js中的错误occours:

Uncaught TypeError: Object [object Object] has no method 'apply' 

当我对新的Backbone.Model.extend部分进行注释时,我再也没有收到任何错误。

因此,我现在正确地理解了:您必须在自己的自定义js文件周围包装一个requirejs函数

该函数称为define。第一个参数是您在main.js文件中定义的依赖项数组,或者是指向来自您的另一个自定义js的相对路径。 第二个参数是保存原始文件的回调。重要的是,返回要共享的对象、函数、数组或变量

整个事情看起来是这样的:

define(
    ['underscore', 'backbone'], // the dependencies (either relative paths or shortcuts defined in main.js
    function(_, Backbone){ // the return statement of the deps mapped to a var
        var MessageModel = Backbone.Model.extend({ // the original code, file
            defaults: { body: '' },

            initialize: function(){}
        });

        return MessageModel; // the return statement, sharing the "final result", sometimes you return the initialize parameter
    });
对于包装模型的集合也是如此:

define(
    ['jquery', 'underscore', 'backbone', 'models/message_model'], // deps and the last one is the relative path
     function($, _, Backbone,MessageModel){ // same as above explained
var MessageCollection = Backbone.Collection.extend({
    model: MessageModel,

    initialize: function(){}
});

return MessageCollection;
}))


我现在只需要弄清楚如何引导到整个应用程序。但我认为我需要更多的主干知识来完成这项工作:)

根据我的经验,引导应用程序的最佳方法是创建一个backbone.Router。因此,您可以将URL与应用程序功能相关联。 如果您使用的是RequireJS+主干,那么您可能有一个main.js,其中配置了RequireJS(路径、垫片等)。第一次调用“require”用于加载初始脚本,以便引导整个应用程序。 例如:

/**
* main.js - RequireJS bootstrap
*/
require.config({
  paths: {
    //your paths
  },
  shim: {
    //your shims
  }
});

require(
  [
    'app' //app.js is at the same directory as main.js 
  ],
  function(app) {
    app.init();
  }
);
然后在app.js中,您可以创建一个新的路由器实例,也可以开始创建视图和模型


进一步参考:

谢谢您的示例!在学习主干网时,我尝试先使用app.js和视图、模型、集合等来遵循您的建议。但这会产生一些奇怪的错误。我已编辑开始线程。加载下划线或主干线时似乎出现问题。在app.js的第二行中放置一个断点,并检查“\u1”或“主干”是否未定义。在这种情况下,请检查路径和libs版本以查找兼容性问题。如果一切都失败了,试着使用AMD版本的主干和undercore:我用这三个参数做了一个console.log。这三个看起来都是有效的,但我还指定了一些错误。当我想创建一个新的消息实例时,就会发生这种情况。(我也可以取消对模式的注释,但实例化它会产生错误)好的,删除此行“var Message=new Backbone.Model.extend”中的“new”。它应该是var Message=Backbone.Model.extendt这是:)谢谢你的帮助我永远不会解决阿洛尼诺的问题,我很高兴能帮助你