首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本要求:下划线+主干+ jquery

基本要求:下划线+主干+ jquery
EN

Stack Overflow用户
提问于 2013-05-18 01:45:53
回答 4查看 1.3K关注 0票数 1

我想做一个骨架应用程序使用require.js,backbone.js和underscore.js。根据www tutorials,我已经创建了一个框架,但是我在某个地方有一个bug。

这是init.js代码:

代码语言:javascript
复制
requirejs.config({
    baseUrl: 'js',
    paths: {
        jquery: 'http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery',
        underscore: 'http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore',
        backbone: 'http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone'
    },
    shim: {
        backbone: {
            deps: ['jquery', 'underscore'],
            exports: 'Backbone'
        },
        underscore: {
            exports: '_'
        },
        jquery: {
            exports: '$'
        }
    }
});

require(['underscore', 'backbone', 'app'],
function(_, Backbone, app) {
    console.log(app);
    app.start();
});

这是app.js:

代码语言:javascript
复制
require(['underscore', 'backbone'],
function(_, Backbone) {

    'use strict';

    return {
        start: function() {
            console.log('APP', 'start');
        }
    };
});

这是index.html:

代码语言:javascript
复制
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Wealthy Laughing Duck</title>
        <script data-main="js/init" src="http://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.5/require.min.js"></script>
    </head>
    <body>
    </body>
</html>

我面临的问题是app.js文件return不能工作(可能是require.js出了问题)。控制台输出为:

代码语言:javascript
复制
undefined ----- init.js:24
Uncaught TypeError: Cannot call method 'start' of undefined ----- init.js:25

问题是:如果app是在init.js中定义的,为什么它在app.js中是未定义的

编辑:目录结构如下:

代码语言:javascript
复制
/ index.html
/ js / init.js
/ js / app.js
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-18 02:02:36

app.js需要调用define,而不是require。这将为其他模块提供一个名为'app‘的模块:

app.js

代码语言:javascript
复制
define(['underscore', 'backbone'],
function(_, Backbone) {

    'use strict';

    return {
        start: function() {
            console.log('APP', 'start');
        }
    };
});
票数 3
EN

Stack Overflow用户

发布于 2013-05-18 01:51:44

我认为你需要将app添加到你的路径中,以便需要它。

代码语言:javascript
复制
requirejs.config({
    baseUrl: 'js',
    paths: {
        jquery: 'http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery',
        underscore: 'http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4   /underscore',
        backbone: 'http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone'
        app:  '../../App' // your relative pathwhere you have your app.js file
    },
    shim: {
        backbone: {
             deps: ['jquery', 'underscore'],
             exports: 'Backbone'
        },
        underscore: {
            exports: '_'
        },
        jquery: {
            exports: '$'
        }
    }
 });
票数 0
EN

Stack Overflow用户

发布于 2013-05-18 02:02:33

我认为你可能遇到的是语法问题,而不是其他问题。下面是我如何设置在require.js上调用的require_config.js:

代码语言:javascript
复制
require.config({
    baseUrl: '/ui/js',
    paths : {
        'incl' : '/ui/incl'
    },
    shim: {
        'backbone': {
            //These script dependencies should be loaded before loading
            //backbone.js
            deps: ['underscore', 'jquery'],
            //Once loaded, use the global 'Backbone' as the
            //module value.
            exports: 'Backbone'
        }
    }
});

这将设置所有的依赖项(我没有路径成员,因为我只是在脚本标记中声明了backbone和下划线以及jquery )。但不要紧,一旦它们都定义好了,我就不需要再引用它们了。下面是一个简单的控制器示例,演示了这一点:

代码语言:javascript
复制
require([
    'models/myModel',
    'views/myView
], function(MyModel, MyView) {
    var MyController = function() {
        var my_model = new MyModel();
        var view = new MyView({
            model : my_model
        });
    }

    $(function() {
        new MyController();
    });
});

如您所见,jQuery、Backbone和Underscore都没有被引用。他们已经装上子弹了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16615043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档