2013-02-24 2 views
5

이 작업을 수행하는 방법에 대한 몇 가지 방법을 보았지만 어느 것이 올바른 방법인지 결코 알 수 없습니다.백본 응용 프로그램 부트 스트랩

Jeffrey Way from NetTuts+Addy Osmani은 응용 프로그램을 시작하기 위해 '기본'응용 프로그램보기를 인스턴스화합니다. 응용 프로그램을 부트 스트랩이 두 가지 사이에는 중요한 차이가

window.App = 
    Models: {} 
    Collections: {} 
    Views: {} 
    Routers: {} 

    init: -> 
     new App.Router() 
     Backbone.history.start() 
    } 
} 

$(document).ready -> 
    App.init() 

있습니까 :

require(['views/app'], function(AppView) { 
    new AppView(); 
}); 

Ryan Bates from Railscasts

는 후속 요청을 처리하는 라우터를 인스턴스화하여 자신의 응용 프로그램을 시작?

저는 Ryan Bates가 자신의 모든 모델,보기를 첨부하는 App 개체를 만드는 것을 아주 좋아합니다. 그는 CoffeeScript를 사용하지만이 개체가 처리되는 방식에 차이가 있는지 확실하지 않습니다. 나는이 시도하고 나는 그것이 RequireJS 작업을 가져올 수 없습니다 :

define(['backbone', 'loginView'], function(Backbone, LoginView) { 
    var Router = Backbone.Router.extend({ 

    routes: { 
     '': 'index' 
    }, 

    index: function() { 
     var loginView = new LoginView(); 
    } 

    }); 

    return Router; 
}); 

그리고 내 loginView :

require(['jquery', 'backbone', 'router'], function ($, Backbone, Router) { 
    window.App = { 
     Models: {}, 
     Collections: {}, 
     Views: {}, 
     Aggregator: _.extend({}, Backbone.Events), 
     Hook: $('#application'), 
     Router: Router, 

     init: function() { 
      new App.Router(); 
      Backbone.history.start(); 
     } 
    } 
    $(document)ready(function() { 
     App.init(); 
    }); 
}); 

내가 다음 인덱스 경로를 당한다 loginView를 생성하는 간단한 라우터가 :

:

define(['backbone'], function(Backbone) { 
    var LoginView = Backbone.View.extend({ 

    }); 



    return LoginView; 
}); 

작업의 라이언 베이츠 '의 방법을 따르십시오, 내가 좋아하는 뭔가를하고 싶어 0

하지만이 그가 커피 스크립트에 무엇을 어떻게 다른지 확실히 확실하지 않다 :

class App.Views.LoginView extends Backbone.View 

내 LoginView의 initialize 방법 콘솔에 '앱'을 기록, 내 주에서 개체를 얻을 그러나 .js 파일을 App.Views 개체에 연결하려고하면 App.Views 정의되지 않은 말한다. 여기 뭔가 잘못하고 있는거야?

+3

및 레일 접근 방식은 호환 가능합니다. Require.js는'define' 호출에 명시 적으로 나열된 의존성을 사용하여 일들을 처리하기를 원합니다. 이는 주로'window.App'에 대한 필요성을 무효화시킵니다. Rails 방식은 자산 파이프 라인을 통해 모든 것을 하나의 큰 더미에 던져 버리는 것이므로 큰 혼란을 피하기 위해 글로벌'window.App'가 필요합니다. AFAIK, 당신은'백본 (backbone) '을 전달해야만하는 것처럼'window.App'를'define' 함수에 전달해야합니다. 나는 필요 없다.그래도 나는 뭔가 명백한 것을 놓칠 수 있었다. –

+0

감사합니다. 나는 여전히 Require.js를 사용하는 법을 배우기 때문에 당신이 말하는 것이 정확할 수도 있습니다. 누군가가 문제에 대해 밝힐 수 있기를 바랍니다. – cabaret

+0

나를 너무 멀리 믿지 마라. 바라건대 어떤 require.js 사람들이 함께 일을 명확히 할 것이다. BTW,'App.Views.LoginView = Backbone.View.extend ({});와'App.Views.LoginView extends Backbone.View'는 기능적으로 동일합니다. –

답변

0

당신이 만드는 경우 :

App.Views.LoginView = Backbone.View.extend({}); 

그것은에서 매우 다르다 :

class App.Views.LoginView extends Backbone.View 

당신은 coffee to js에서 변환하여 커피 스크립트를 확인할 수 있습니다

var __hasProp = {}.hasOwnProperty, 
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; 

App.Views.LoginView = (function(_super) { 

    __extends(LoginView, _super); 

    function LoginView() { 
    return LoginView.__super__.constructor.apply(this, arguments); 
    } 

return LoginView; 

})(Backbone.View); 

나는 것 todomvc's backbone-require setup에 대한 리포를 확인하는 것이 좋습니다.

내가 컬렉션, 모델, 뷰 등을 보유하는 글로벌 응용 프로그램 객체 창에 부착하지만, 하위 개체를 사용하지으로 모두 느슨하게를 기반으로 커피 스크립트 todo setup

나는 require.js 생각하지 않습니다
관련 문제