2013-02-24 20 views
5

Bunun nasıl yapılacağına dair birkaç yol gördüm, ancak hangisinin 'doğru' yol olduğunu asla anlayamıyorum. Uygulamalarını başlatmak için bir 'ana' uygulama görünümünü başlatmak üzereBir Omurga uygulamasını önyükleme

Jeffrey Way from NetTuts+ ve Addy Osmani. Bir uygulamayı işe koşulması bu iki yolu arasında önemli bir fark

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

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

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

var mı:

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

Ryan Bates from Railscasts

daha sonraki isteklerini işleyen bir yönlendirici nesnelleştirilmesiyle başvurusunu başlar?

Ryan Bates, tüm modellerini, görünümlerini eklediği bir App nesnesini nasıl oluşturduğunu oldukça beğenirim ... CoffeeScript'i kullanıyor olsa da, bu nesnenin nasıl ele alınacağı konusunda herhangi bir fark yaratıp yaratmadığından emin değilim. Bu çalıştı ve bunu RequireJS çalışmak için alamadım:

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

    routes: { 
     '': 'index' 
    }, 

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

    }); 

    return Router; 
}); 

Ve 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(); 
    }); 
}); 

Sonra bir dizin yolu çarpınca LoginView yaratır basit yönlendirici vardır:

:

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

    }); 



    return LoginView; 
}); 

çalışma Ryan Bates'in yolunu izleyin, ben böyle bir şey yapmak istedim 0

ama bu o CoffeeScript ne yaptığını nasıl farklı pek emin değilim:

class App.Views.LoginView extends Backbone.View 

benim LoginView en initialize yönteminde konsola 'App' log, benim ana nesneyi almak .js dosyası, App.Views nesnesine bir şey iliştirmeye çalıştığımda, App.Views undefined olduğunu söylüyor. Burada yanlış bir şey mi olmalı?

+3

ve Raylar yaklaşımları uyumludur. Require.js, 'define' çağrılarında açıkça listelenen bağımlılıklar ile işleri yoluna koymak ister, bu çoğunlukla 'window.App' gereksinimini ortadan kaldırır. Rails yolu, her şeyden büyük bir yığın halinde varlık boru hattı üzerinden atmaktır, böylece büyük bir karmaşadan kaçınmak için küresel bir pencere açılır. AFAIK, '' window'App' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' belgesine 'geçmek zorunda olduğunuz gibi '' '' 'fonksiyonlarına geçmek zorundasınız. İhtiyacım yok.Js adam olsa da ben açık bir şey eksik olabilir. –

+0

Teşekkürler. Hala Require.js'yi kullanmayı öğreniyorum, bu yüzden söyledikleriniz doğru olabilir. Umarım birisi problem hakkında biraz ışık tutabilecektir. – cabaret

+0

Bana çok güvenme, umarım bir takım gereksinimleri açıklığa kavuşturmak için bazı require.js kullanıcıları olur. BTW, 'App.Views.LoginView = Backbone.View.extend ({});' ve App.Dünya.Views.LoginView uzantıları Backbone.View 'işlevsel olarak eşdeğerdir. –

cevap

0

Eğer oluştururken:

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

Bu oldukça farklı açıklanmıştır:

class App.Views.LoginView extends Backbone.View 

Sen coffee to js dan dönüştürerek CoffeeScript kontrol edebilirsiniz:

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); 

ben istiyorum todomvc's backbone-require setup için repo'yu kontrol etmenizi öneririz.

Ben koleksiyonları, modeller, görüşlerini vb tutmak için küresel bir uygulama nesne pencereye bağlı, ancak alt nesneleri kullanarak değil her iki gevşek dayalı bir CoffeeScript todo setup var

ben require.js sanmıyorum