2015-11-02 31 views
0

我是BackboneJS的新手,但我正在盡我所能去學習它。我對AngularJS更加熟悉,所以我在BackboneJS中有一些困惑,但肯定也想成爲一名BackboneJS開發專家。使用來自API端點的響應填充BackboneJS模型

回到我以前的工作,我是前端開發人員,我會與Java開發人員一起工作。我們將會有一個關於JSON響應如何的會議。基本上,我會對其中一個端點進行REST調用(使用Restangular或$ http),然後我會得到響應。 JSON響應將被分配給一個範圍變量,例如$ scope.bookCollection。在我的模板中,我將使用ng-repeat來顯示它。

現在與BackboneJS,我想正確地做到這一點。我今天看到BackboneJS Model是一個容器。我想要發生的是,在進行fetch()之後,我希望將JSON響應放入我定義的模型中。這是如何完成的?

我找到了一個例子jsfiddle,但我認爲這是一個非常糟糕的例子。我現在找不到有用的東西,一些數據很好的東西。

require.config({ 
    paths: { 
     jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min', 
     underscore: 'http://underscorejs.org/underscore', 
     backbone: 'http://backbonejs.org/backbone-min' 
    }, 
    shim: { 
     backbone: { 
      deps: ["underscore", "jquery"], 
      exports: "Backbone" 
     }, 

     underscore: { 
      exports: "_" 
     } 
    } 
}); 
require([ 
    'jquery', 
    'underscore', 
    'backbone'], function ($, _, Backbone) { 
    var UserModel = Backbone.Model.extend({ 
     urlRoot: '/echo/json/', 
     defaults: { 
      name: '', 
      email: '' 
     } 
    }); 
    var userDetails = { 
     name: 'Nelio', 
     email: '[email protected]' 
    }; 
    var user = new UserModel(userDetails); 

    user.fetch({ 
     success: function (user) { 
      console.log(user.toJSON()); 
     } 
    }); 
}); 

這裏是的jsfiddle: http://jsfiddle.net/20qbco46/

+2

看起來你已經創建了一個模型,我們正在調用方法取...從服務返回的模型將與數據更新...爲什麼你認爲這個例子很糟糕..?你有一個具體的問題..? –

+0

我想這不是一個好例子,因爲我沒有看到將返回的值分配給模型屬性的代碼。我希望看到this.name = response.name。不過,你說這個模型會被更新。這將如何發生? BackboneJS會自動爲我們做嗎? – devwannabe

+1

是'backbone.js'在內部爲我們做。 –

回答

1

我想放在JSON響應在我定義的模型。 如何完成?

如果你想呈現來自您模型中的數據,你會使用這個view

首先,創建一個view渲染你的數據:

// Create a new view class which will render you model 
var BookView = Backbone.View.extend({ 
    // Use underscores templating 
    template: _.template('<strong><%= title %></strong> - <%= author %>'), 
    initialize: function() { 
     // Render the view on initialization 
     this.render(); 
     // Update the view when the model is changed 
     this.listenTo(this.model, "change", this.render); 
    }, 
    render: function() { 
     // Render your model data using your template 
     this.$el.html(this.template(this.model.toJSON())); 
     return this; 
    } 
}); 

參見templatetoJSON以及$el


接下來,創建一個Model

// Create a model class 
var Book = Backbone.Model.extend({ 
    urlRoot: '/echo/json/', 
    defaults: { 
     title : '', 
     author: '' 
    }, 
}); 

您的模型將舉行從url/urlRoot

獲取的數據可以使用set如果你正在嘗試新的屬性添加到您的模型。

您可以使用get從模型中獲取屬性。

另請參閱 - savedestroy


然後,實例化模型:

// Some dummy data 
var instance = { 
    title: 'learn Backbone JS', 
    author: 'Bobby Longsocks', 
}; 

// Instansite your model 
var model = new Book(instance); 

最後,fetch您的模型數據,並創建你的新實例查看:

// Fetch your model 
model.fetch({ 
    success: function(book) { 
     // Instansite your view, passing in your model 
     var view = new BookView({model: book, el: $('body')}); 
    } 
}); 

這裏是一個Example可以撥弄用。

還有一些進一步閱讀Annotated Source

+1

非常感謝!我會玩它! – devwannabe

+0

好吧,玩了這麼多次後,我想這不是我要找的那個。我真正在尋找的東西類似於從返回json對象的url端點進行GET。但是,可以從.json文件中獲取(),以便我們可以模擬真正的GET方法請求? – devwannabe

+1

是的,'fetch'可以從Json文件中檢索 - [看這裏](http://stackoverflow.com/questions/9431673/load-data-into-a-backbone-collection-from-json-file#11827616) 。您可以非常類似地使用'fetch'來使用'ajax'(無論如何''fetch'最終會執行Ajax調用)。另外 - 看看[Backbone的'emulateHTTP'](http://backbonejs.org/#Sync-emulateHTTP) – Und3rTow

相關問題