JQuery / JavaScript kodunu düzenlemenin en iyi yolu (2013) [kapalı]


104

Sorun

Bu cevap daha önce cevaplanmış ancak eski ve güncel değil. Tek bir dosyada 2000 satırdan fazla kodum var ve hepimizin bildiği gibi, özellikle koda baktığımda veya yeni özellikler eklerken bunun kötü bir uygulama olduğunu biliyoruz. Kodumu şimdilik ve gelecekte daha iyi düzenlemek istiyorum.

Çok sayıda düğme, UI öğesi, sürükleme, bırakma, eylem dinleyicisi / işleyicisi olan ve birkaç dinleyicinin aynı işlevi kullanabileceği küresel kapsamda işlev gören bir araç (basit bir web sitesi değil) oluşturduğumu belirtmeliyim.

Örnek kod

$('#button1').on('click', function(e){
    // Determined action.
    update_html();
});

... // Around 75 more of this

function update_html(){ .... }

...

Daha fazla örnek kod

Sonuç

Bu kodu en iyi kullanım için düzenlemem ve kendimi tekrar etmemem ve yeni özellikler ekleyip eskilerini güncelleyebilmem gerekiyor. Bunun üzerinde kendi başıma çalışacağım. Bazı seçiciler 100 satır kod olabilir, diğerleri 1. Biraz baktım require.jsve biraz tekrarlı buldum ve aslında gerekenden daha fazla kod yazdım . Bu kriterlere uyan olası herhangi bir çözüme açığım ve kaynak / örneklere bağlantı her zaman bir artıdır.

Teşekkürler.


Backbone.js ve require.js eklemek istiyorsanız, bu çok iş olacaktır.
jantimon

1
Bunu yazarken kendini defalarca hangi görevleri yaparken buluyorsun?
Mike Samuel


4
Angular öğrenin! Bu gelecek.
Onur Yıldırım

2
Kodunuz harici bir bağlantıda olmamalı, burada olmalıdır. Ayrıca @codereview, farklı türde sorular için daha iyi bir yerdir.
George Stocker

Yanıtlar:


98

Size yardımcı olabilecek veya olmayabilecek bazı basit şeyleri gözden geçireceğim. Bazıları apaçık olabilir, bazıları aşırı derecede gizemli olabilir.

1. Adım: Kodunuzu bölümlere ayırın

Kodunuzu birden çok modüler birime ayırmak çok iyi bir ilk adımdır. Neyin "birlikte" işe yaradığını toparlayın ve onları kendi küçük kapalı birimlerine koyun. şimdilik format hakkında endişelenmeyin, onu satır içinde tutun. Yapı daha sonraki bir noktadır.

Diyelim ki böyle bir sayfanız var:

görüntü açıklamasını buraya girin

Bakım kolaylığı için (ve 1000 satırı elemek zorunda kalmadan) başlıkla ilgili tüm olay işleyicileri / bağlayıcıları orada olacak şekilde bölümlere ayırmak mantıklı olacaktır.

Ardından, JS'nizi tek bir birime yeniden oluşturmak için Grunt gibi bir araç kullanabilirsiniz.

Adım 1a: Bağımlılık yönetimi

AMD adlı bir şeyi uygulamak için RequireJS veya CommonJS gibi bir kitaplık kullanın . Eşzamansız Modül Yükleme, kodunuzun neye bağlı olduğunu açıkça belirtmenize olanak tanır, bu da kitaplık çağrısını koda aktarmanıza olanak tanır. Kelimenin tam anlamıyla "Bunun jQuery'ye ihtiyacı var" diyebilirsiniz ve AMD onu yükleyecek ve jQuery mevcut olduğunda kodunuzu çalıştıracaktır .

Bunda da gizli bir cevher var: Kütüphane yüklemesi, DOM hazır olduğu anda yapılacaktır, daha önce değil. Bu artık sayfanızın yüklenmesini durdurmuyor!

2. Adım: Modülerleştirin

Tel çerçeveyi görüyor musun? İki reklam birimim var. Büyük ihtimalle olay dinleyicileri paylaşacaklar.

Bu adımdaki göreviniz, kodunuzdaki tekrarlama noktalarını belirlemek ve tüm bunları modüller halinde sentezlemeye çalışmaktır . Modüller, şu anda her şeyi kapsayacak. İlerledikçe eşyaları ayıracağız.

Bu adımın tüm fikri, 1. adımdan başlamak ve tüm kopya-pastaları silmek, bunları gevşek bağlı birimlerle değiştirmek. Yani, sahip olmak yerine:

ad_unit1.js

 $("#au1").click(function() { ... });

ad_unit2.js

 $("#au2").click(function() { ... });

Sahip olacağım:

ad_unit.js:

 var AdUnit = function(elem) {
     this.element = elem || new jQuery();
 }
 AdUnit.prototype.bindEvents = function() {
     ... Events go here
 }

page.js:

 var AUs = new AdUnit($("#au1,#au2"));
 AUs.bindEvents();

Bu , tekrardan kurtulmanın yanı sıra etkinlikleriniz ve işaretlemeniz arasında bölmelere ayırmanıza olanak tanır . Bu oldukça iyi bir adım ve bunu daha sonra daha da genişleteceğiz.

3. Adım: Bir çerçeve seçin!

Tekrarları daha da modülerleştirmek ve azaltmak istiyorsanız, MVC (Model - Görünüm - Denetleyici) yaklaşımlarını uygulayan bir sürü harika çerçeve vardır. Benim favorim Backbone / Spine, ancak bir de Angular, Yii var ... Liste uzayıp gidiyor.

Bir Modeli verilerinizi temsil eder.

Bir Görünüm İz-up temsil eden ve tüm olaylar buna bağlı

Bir Denetleyici , iş mantığınızı temsil eder - başka bir deyişle, denetleyici sayfaya hangi görünümlerin yükleneceğini ve hangi modellerin kullanılacağını söyler.

Bu, önemli bir öğrenme adımı olacak, ancak ödül buna değer: spagetti yerine temiz, modüler kodu tercih ediyor.

Yapabileceğiniz daha pek çok şey var, bunlar sadece kılavuzlar ve fikirlerdir.

Koda özgü değişiklikler

Kodunuzda bazı özel iyileştirmeler şunlardır:

 $('.new_layer').click(function(){

    dialog("Create new layer","Enter your layer name","_input", {

            'OK' : function(){

                    var reply = $('.dialog_input').val();

                    if( reply != null && reply != "" ){

                            var name = "ln_"+reply.split(' ').join('_');
                            var parent = "";

                            if(selected_folder != "" ){
                            parent = selected_folder+" .content";
                            }

                            $R.find(".layer").clone()
                            .addClass(name).html(reply)
                            .appendTo("#layer_groups "+parent);

                            $R.find(".layers_group").clone()
                            .addClass(name).appendTo('#canvas '+selected_folder);

            }

        }

    });
 });

Bu daha iyi şöyle yazılır:

$("body").on("click",".new_layer", function() {
    dialog("Create new layer", "Enter your layer name", "_input", {
         OK: function() {
             // There must be a way to get the input from here using this, if it is a standard library. If you wrote your own, make the value retrievable using something other than a class selector (horrible performance + scoping +multiple instance issues)

             // This is where the view comes into play. Instead of cloning, bind the rendering into a JS prototype, and instantiate it. It means that you only have to modify stuff in one place, you don't risk cloning events with it, and you can test your Layer stand-alone
             var newLayer = new Layer();
             newLayer
               .setName(name)
               .bindToGroup(parent);
          }
     });
});

Kodunuzda daha önce:

window.Layer = function() {
    this.instance = $("<div>");
    // Markup generated here
};
window.Layer.prototype = {
   setName: function(newName) {
   },
   bindToGroup: function(parentNode) {
   }
}

Birdenbire, kopyalayıp yapıştırmadan kodunuzun herhangi bir yerinden standart bir katman oluşturmanın bir yoluna sahip olursunuz. Bunu beş farklı yerde yapıyorsun. Sana beş kopya-yapıştır bıraktım.

Bir tane daha:

// Eylemler için kural kümesi sarmalayıcı

var PageElements = function(ruleSet) {
ruleSet = ruleSet || [];
this.rules = [];
for (var i = 0; i < ruleSet.length; i++) {
    if (ruleSet[i].target && ruleSet[i].action) {
        this.rules.push(ruleSet[i]);
    }
}
}
PageElements.prototype.run = function(elem) {
for (var i = 0; i < this.rules.length; i++) {
    this.rules[i].action.apply(elem.find(this.rules.target));
}
}

var GlobalRules = new PageElements([
{
    "target": ".draggable",
    "action": function() { this.draggable({
        cancel: "div#scrolling, .content",
        containment: "document"
        });
    }
},
{
    "target" :".resizable",
    "action": function() {
        this.resizable({
            handles: "all",
            zIndex: 0,
            containment: "document"
        });
    }
}

]);

GlobalRules.run($("body"));

// If you need to add elements later on, you can just call GlobalRules.run(yourNewElement);

Bu, standart olmayan etkinlikleriniz veya yaratma etkinlikleriniz varsa kuralları kaydetmenin çok etkili bir yoludur. Bu aynı zamanda, bir pub / sub bildirim sistemi ile birleştirildiğinde ve bir element oluşturduğunuzda ateşlediğiniz bir olaya bağlandığında ciddi anlamda şaşırtıcıdır. Fire'n'forget modüler olay bağlamayı!


2
@Jessica: Çevrimiçi bir araç neden farklı olsun? Yaklaşım hala aynı: bölümlere ayırın / modüler hale getirin, bir çerçeve kullanarak bileşenler arasında gevşek bağlantıyı teşvik edin (bugünlerde hepsi olay yetkilendirmesiyle birlikte geliyor), kodunuzu ayırın. Oradaki aletiniz için geçerli olmayan ne var? Bir sürü düğmenizin olması mı?
Sébastien Renauld

2
@Jessica: Güncellendi. A benzer bir konsept kullanarak Katmanların oluşturulmasını basitleştirdim ve kolaylaştırdım View. Yani. Bu, kodunuz için nasıl geçerli olmaz?
Sébastien Renauld

10
@Jessica: İyileştirmeden dosyalara bölmek, gereksiz dosyaları depolamak için daha fazla çekmece satın almaya benzer. Bir gün dışarı çıkmalısın ve çekmeceler dolmadan orayı temizlemek daha kolay. Neden ikisini birden yapmıyorsun? Şu anda, senin gibi görünüyor bir isteyeceksiniz layers.js, sidebar.js, global_events.js, resources.js, files.js, dialog.jssadece kodunuzu bölmek gidiyoruz. Kullanım gruntbirine bunları yeniden inşa etmek ve Google Closure Compilerderlemek ve en aza indirmek için.
Sébastien Renauld

3
Require.js'yi kullanırken gerçekten r.js optimize edicisine de bakmalısınız, bu gerçekten require.js'yi kullanmaya değer kılan şeydir. Tüm dosyalarınızı birleştirecek ve optimize edecek: requirejs.org/docs/optimization.html
Willem D'Haeseleer

2
@ SébastienRenauld Cevabınız ve yorumlarınız diğer kullanıcılar tarafından hala çok beğenilmektedir. Eğer bu seni daha iyi hissettirebilirse;)
Adrien Be

13

Required.js kullanarak mevcut kod tabanınızı birden çok dosyaya bölmenin basit bir yolu. Size kodunuzu iki dosyaya nasıl böleceğinizi göstereceğim. Bundan sonra daha fazla dosya eklemek kolay olacaktır.

Adım 1) Kodunuzun üstünde bir Uygulama nesnesi (veya MyGame gibi tercih ettiğiniz adı) oluşturun:

var App = {}

Adım 2) Tüm üst düzey değişkenlerinizi ve işlevlerinizi App nesnesine ait olacak şekilde dönüştürün.

Onun yerine:

var selected_layer = "";

İstediğiniz:

App.selected_layer = "";

Onun yerine:

function getModified(){
...
}

İstediğiniz:

App.getModified = function() {

}

Bu noktada bir sonraki adımı tamamlayana kadar kodunuzun çalışmayacağını unutmayın.

Adım 3) Uygulamadan geçmek için tüm global değişken ve fonksiyon referanslarını dönüştürün.

Şunun gibi şeyleri değiştirin:

selected_layer = "."+classes[1];

to:

App.selected_layer = "."+classes[1];

ve:

getModified()

to:

App.GetModified()

Adım 4) Kodunuzu bu aşamada test edin - hepsi çalışmalıdır. Muhtemelen bir şeyi kaçırdığınız için ilk başta birkaç hata alacaksınız, bu yüzden devam etmeden önce bunları düzeltin.

Adım 5) Requjs'yi ayarlayın. Bir web sunucusundan sunulan ve kodu şu konumda bulunan bir web sayfanız olduğunu varsayıyorum:

www/page.html

ve jquery

www/js/jquery.js

Bu yollar tam olarak böyle değilse , aşağıdakiler çalışmayacaktır ve yolları değiştirmeniz gerekecektir.

Requjs dosyasını indirin ve www/jsdizininize require.js koyun .

içinde page.html, tüm komut dosyası etiketlerini silin ve aşağıdaki gibi bir komut dosyası etiketi ekleyin:

<script data-main="js/main" src="js/require.js"></script>

www/js/main.jsiçerikle oluştur :

require.config({
 "shim": {
   'jquery': { exports: '$' }
 }
})

require(['jquery', 'app']);

daha sonra 1-3. Adımlarda düzelttiğiniz tüm kodu (tek genel değişkeni Uygulama olmalıdır) şuraya koyun:

www/js/app.js

Bu dosyanın en üstüne şunu koyun:

require(['jquery'], function($) {

Altta koymak:

})

Ardından tarayıcınıza page.html dosyasını yükleyin. Uygulamanız çalışmalıdır!

Adım 6) Başka bir dosya oluşturun

İşte işinizin karşılığını aldığı yer burasıdır, bunu defalarca yapabilirsiniz.

www/js/app.js$ Ve App referanslarından bazı kodları çıkarın .

Örneğin

$('a').click(function() { App.foo() }

İçine koy www/js/foo.js

Bu dosyanın en üstüne şunu koyun:

require(['jquery', 'app'], function($, App) {

Altta koymak:

})

Ardından www / js / main.js'nin son satırını şu şekilde değiştirin:

require(['jquery', 'app', 'foo']);

Bu kadar! Kodu kendi dosyasına her koymak istediğinizde bunu yapın!


Bunun birden fazla sorunu var - bariz olanı, tüm dosyalarınızı en sonunda parçalamanız ve ön işlemciyi kullanmayarak sayfa yüklemesi başına her kullanıcı için 400 bayt boşa harcanan veriyi zorlamanızdır r.js. Ayrıca, OP'nin konusuna gerçekten require.jsdeğinmediniz - sadece genel bir nasıl yapılacağını sağladınız.
Sébastien Renauld

7
Huh? Cevabım bu soruya özeldir. Ve r.js kesinlikle bir sonraki adımdır, ancak buradaki sorun optimizasyon değil organizasyondur.
Lyn Headley

Bu cevabı beğendim, require.js'yi hiç kullanmadım, bu yüzden onu kullanıp kullanamayacağımı ve bundan herhangi bir fayda sağlayıp sağlayamayacağımı görmem gerekecek. Modül kalıbını yoğun bir şekilde kullanıyorum ama belki bu, bazı şeyleri soyutlamama ve sonra onları
Tony

1
@ SébastienRenauld: Bu cevap sadece required.js ile ilgili değil. Çoğunlukla oluşturduğunuz kod için bir ad alanına sahip olmaktan bahsediyor. Bence iyi kısımları takdir etmeli ve herhangi bir sorun bulduğunuzda bir düzenleme yapmalısınız. :)
mithunsatheesh

10

Sorunuz ve yorumlarınız için, kodunuzu Backbone gibi bir çerçeveye taşımak veya Require gibi bir yükleyici kitaplığı kullanmak istemediğinizi varsayacağım. Sadece sahip olduğunuz kodu mümkün olan en basit şekilde organize etmenin daha iyi bir yolunu istiyorsunuz.

Üzerinde çalışmak istediğiniz bölümü bulmak için 2000'den fazla kod satırı arasında gezinmenin can sıkıcı olduğunu anlıyorum. Çözüm, kodunuzu her işlev için bir tane olmak üzere farklı dosyalara bölmektir. Örneğin sidebar.js, canvas.jsvb. Sonra Grunt kullanarak prodüksiyon için onları bir araya getirebilirsiniz, Usemin ile birlikte şuna benzer bir şeye sahip olabilirsiniz:

HTML'nizde:

<!-- build:js scripts/app.js -->
<script src="scripts/sidebar.js"></script>
<script src="scripts/canvas.js"></script>
<!-- endbuild -->

Gruntfile dosyanızda:

useminPrepare: {
  html: 'app/index.html',
  options: {
    dest: 'dist'
  }
},
usemin: {
  html: ['dist/{,*/}*.html'],
  css: ['dist/styles/{,*/}*.css'],
  options: {
    dirs: ['dist']
  }
}

Yeoman'ı kullanmak istiyorsanız, tüm bunlar için size bir standart kod verecektir.

Daha sonra, her dosyanın kendisi için, en iyi uygulamaları takip ettiğinizden ve tüm kod ve değişkenlerin o dosyada olduğundan ve diğer dosyalara bağlı olmadığından emin olmanız gerekir. Bu, bir dosyanın işlevlerini diğerinden çağıramayacağınız anlamına gelmez, önemli olan değişkenlerin ve işlevlerin kapsüllenmiş olmasıdır. Ad alanına benzer bir şey. Tüm kodunuzu Nesne Yönelimli olarak taşımak istemediğinizi varsayacağım, ancak biraz yeniden düzenleme yapmaktan çekinmezseniz, Modül kalıbı denen şeye eşdeğer bir şey eklemenizi tavsiye ederim. Şuna benzer:

sidebar.js

var Sidebar = (function(){
// functions and vars here are private
var init = function(){
  $("#sidebar #sortable").sortable({
            forceHelperSize: true,
            forcePlaceholderSize: true,
            revert: true,
            revert: 150,
            placeholder: "highlight panel",
            axis: "y",
            tolerance: "pointer",
            cancel: ".content"
       }).disableSelection();
  } 
  return {
   // here your can put your "public" functions
   init : init
  }
})();

Sonra bu kod parçasını şu şekilde yükleyebilirsiniz:

$(document).ready(function(){
   Sidebar.init();
   ...

Bu, kodunuzu çok fazla yeniden yazmak zorunda kalmadan çok daha fazla bakım yapılabilir bir koda sahip olmanızı sağlayacaktır.


1
Kodun satır içinde yazılmasından daha iyi olmayan, ikinci-son parçacığı ciddi bir şekilde yeniden düşünmek isteyebilirsiniz: modülünüz gerektirir #sidebar #sortable. Sadece kodu satır içine alarak ve iki IETF'yi kaydederek hafızanızı da kurtarabilirsiniz.
Sébastien Renauld

Buradaki önemli nokta, ihtiyacınız olan kodu kullanabilmenizdir. Sadece orijinal koddan bir örnek kullanıyorum
Jesús Carrera

İsa ile aynı fikirdeyim, bu sadece bir örnek, OP kolayca bir seçenek "nesnesi" ekleyebilir, bu da elemanın seçicisini sabit kodlamak yerine belirtmelerine izin verir, ancak bu sadece hızlı bir örnekti. Modül modelini sevdiğimi söylemek isterim, bu kullandığım birincil modeldir, ancak buna rağmen hala kodumu daha iyi düzenlemeye çalışıyorum. Normalde C # kullanıyorum, böylece işlev adlandırma ve oluşturma çok genel geliyor. Altçizgiler yerel ve özel, değişkenler sadece "nesneler" gibi bir "kalıp" tutmaya çalışıyorum ve sonra dönüşte genel olan işleve başvuruyorum.
Tony

Bununla birlikte, bu yaklaşımda hala zorluklar buluyorum ve bunu yapmanın daha iyi bir yolunu bulmayı arzuluyorum. Ancak, değişkenlerimi ve işlevleri küresel alanda diğer js ile çatışmalara neden olacak şekilde bildirmekten çok daha iyi çalışıyor .... lol
Tony

6

Javascript kodunu standart bir şekilde düzenlemek için javascript MVC Framework kullanın.

Mevcut en iyi JavaScript MVC çerçeveleri şunlardır:

Bir JavaScript MVC çerçevesi seçmek, dikkate alınması gereken pek çok faktör gerektiriyordu. Projeniz için önemli faktörlere dayalı olarak en iyi çerçeveyi seçmenize yardımcı olacak aşağıdaki karşılaştırma makalesini okuyun: http://sporto.github.io/blog/2013/04/12/comparison-angular-backbone-can-ember/

Asynchrounous js dosyası ve modül yüklemesini desteklemek için RequireJS'yi çerçeveyle birlikte de kullanabilirsiniz .
JS Modülü yüklemeye başlamak için aşağıya bakın:
http://www.sitepoint.com/understanding-requirejs-for-effective-javascript-module-loading/


4

Kodunuzu kategorize edin. Bu yöntem bana çok yardımcı oluyor ve herhangi bir js çerçevesiyle çalışıyor:

(function(){//HEADER: menu
    //your code for your header
})();
(function(){//HEADER: location bar
    //your code for your location
})();
(function(){//FOOTER
    //your code for your footer
})();
(function(){//PANEL: interactive links. e.g:
    var crr = null;
    $('::section.panel a').addEvent('click', function(E){
        if ( crr) {
            crr.hide();
        }
        crr = this.show();
    });
})();

Tercih ettiğiniz düzenleyicide (en iyisi Komodo Edit), tüm girişleri daraltarak katlayabilirsiniz ve yalnızca başlıkları göreceksiniz:

(function(){//HEADER: menu_____________________________________
(function(){//HEADER: location bar_____________________________
(function(){//FOOTER___________________________________________
(function(){//PANEL: interactive links. e.g:___________________

2
Kitaplıklara dayanmayan standart bir JS çözümü için +1.
hobberwickey

Birden çok nedenden dolayı -1. Kod eşdeğeri OP'nin ... + "bölüm" başına bir IETF ile tamamen aynıdır. Dahası, modül geliştiricilerinin bunların oluşturulmasını / kaldırılmasını geçersiz kılmalarına veya davranışı genişletmelerine izin vermeden aşırı geniş seçiciler kullanıyorsunuz. Son olarak, IETF'ler ücretsiz değildir.
Sébastien Renauld

@hobberwickey: Seni bilmiyorum, ama topluluk tarafından yönlendirilen ve mümkünse hataların hızlı bir şekilde bulunabileceği bir şeye güvenmeyi tercih ederim. Özellikle de başka türlü yapmak beni tekerleği yeniden icat etmeye mahkum ediyorsa.
Sébastien Renauld

2
Bütün bunlar kodu ayrı bölümlere ayırmaktır. En son kontrol ettiğimde A: iyi uygulama ve B: gerçekten topluluk destekli bir kitaplığa ihtiyacınız olan bir şey değildi. Tüm projeler Backbone, Angular vb. İle uyumlu değildir ve kodu işlevlere sararak modüler hale getirmek iyi bir genel çözümdür.
hobberwickey

Bu yaklaşımı kullanmak için herhangi bir favori kitaplığa güvenmek istediğiniz her zaman mümkündür. Ancak yukarıdaki çözüm, saf javascript, özel kitaplıklar veya herhangi bir ünlü js çerçevesi ile çalışır

3

Öneririm:

  1. olay yönetimi için yayıncı / abone kalıbı.
  2. nesne yönelimi
  3. ad aralığı

Sizin durumunuzda Jessica, arayüzü sayfalara veya ekranlara bölün. Sayfalar veya ekranlar nesneler olabilir ve bazı üst sınıflardan genişletilebilir. Bir PageManager sınıfıyla sayfalar arasındaki etkileşimleri yönetin.


Bunu örneklerle / kaynaklarla genişletebilir misiniz?
Kivylius

1
"Nesne yönelimi" ile neyi kastediyorsunuz? JS Neredeyse her şeyi olan bir nesne. Ve JS'de sınıf yok.
Bergi

2

Backbone gibi bir şey kullanmanızı öneririm. Backbone, RESTFUL destekli bir javascript kütüphanesidir. Ik, kodunuzu daha temiz ve daha okunaklı hale getirir ve needjs ile birlikte kullanıldığında güçlüdür.

http://backbonejs.org/

http://requirejs.org/

Omurga gerçek bir kütüphane değildir. Javascript kodunuza yapı kazandırmak içindir. Jquery, jquery-ui, google-maps vb. Gibi diğer kütüphaneleri de içerebilmektedir. Backbone, bence Nesne Yönelimli ve Model Görünüm Kontrolör yapılarına en yakın javascript yaklaşımıdır.

Ayrıca iş akışınızla ilgili olarak .. Uygulamalarınızı PHP'de oluşturuyorsanız Laravel kitaplığını kullanın. RESTfull prensibi ile kullanıldığında Backbone ile kusursuz bir şekilde çalışacaktır. Laravel Framework bağlantısının ve RESTfull API'leri oluşturma hakkında bir öğreticinin altında:

http://maxoffsky.com/code-blog/building-restful-api-in-laravel-start-here/

http://laravel.com/

Aşağıda nettuts'tan bir öğretici var. Nettuts'ta birçok Yüksek Kaliteli öğretici vardır:

http://net.tutsplus.com/tutorials/javascript-ajax/understanding-backbone-js-and-the-server/


0

Belki de, yeoman http://yeoman.io/ gibi araçları kullanarak bütün bir geliştirme iş akışını uygulamaya başlamanın tam zamanı . Bu, tüm bağımlılıklarınızı kontrol etmenize, süreç oluşturmanıza ve isterseniz otomatik test etmenize yardımcı olacaktır. Başlamak için çok fazla çalışma var, ancak uygulandığında gelecekteki değişiklikleri çok daha kolay hale getirecek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.