#jquery #backbone.js #underscore.js
#jquery #backbone.js #underscore.js
Вопрос:
Я новичок Backbone.js
. Я использую конструктор коллекции для передачи данных и отображения в view ( var salecollection = new SaleCollection([{QuotationID: 2,QuotationNumber:'222'},{QuotationID:3,QuotationNumber:'333'}]);
).
И теперь я хочу отображать данные из localStorage
, а не брать данные из конструктора коллекции.
Данные localStorage устанавливаются другой функцией, а не методом магистрали. С помощью ( window.localStorage.setItem
).
Любая идея, пример были бы признательны. Спасибо.
SaleView.js
define(["jquery" ,
"underscore" ,
"backbone" ,
"models/SaleModel",
"text!templates/Quotation/saleTemplate.html",
"collections/SaleCollection"
],function($ , _ , Backbone , saleModel,saleTemplate, SaleCollection){
var saleView = Backbone.View.extend({
initialize: function() {
this.render();
},
tagName: '<tr>',
render: function(){
var sale = _.template(saleTemplate);
this.$el.html(sale((this.model.toJSON())));
}
});
return saleView;
});
SaleCollectionView.js
define(["jquery" ,
"underscore" ,
"backbone",
"views/Sale",
"collections/SaleCollection",
"models/SaleModel",
],function($, _, Backbone, SaleView, SaleCollection, SaleModel){
var saleCollectionView = Backbone.View.extend({
tagName: 'table',
render: function(){
this.collection.each(function(sale){
var saleView = new SaleView({ model: sale });
this.$el.append(saleView.el);
}, this);
}
});
return saleCollectionView;
});
SaleModel.js
define(["underscore" , "backbone"],function(_ , Backbone){
var saleModel = Backbone.Model.extend({
defaults : {
QuotationID : "1",
QuotationNumber : "111"
}
});
return saleModel;
});
SaleCollection.js
define(["underscore",
"backbone",
"models/SaleModel"
],function(_, Backbone,saleModel){
var saleCollection = Backbone.Collection.extend({
model : saleModel,
url: "http://localhost:/Website"
});
return saleCollection;
});
CustomerView.js
define(["jquery" ,
"underscore" ,
"backbone",
"text!templates/Customer/customerTemplate.html",
"text!templates/Quotation/saleTemplate.html",
"views/Customer/SaleCollectionView",
"collections/SaleCollection",
"views/Customer/SaleView",
"models/SaleModel"
],function($, _, Backbone, WebConfig, CustomerProfile, Sale, SaleCollectionView, SaleCollection, SaleView, SaleModel){
var CustomerView = Backbone.View.extend({
initialize: function() {
},
el : "#container",
events : {
'click #saleTab' : 'sale',
},
'sale' : function(){
var salemodel = new SaleModel();
var saleview = new SaleView({model : salemodel});
var salecollection = new SaleCollection([{QuotationID: 2,QuotationNumber:'222'},{QuotationID:3,QuotationNumber:'333'}]);
var salecollectionview = new SaleCollectionView({ collection: salecollection},{el:'#saleTabDiv'});
salecollectionview.render();
$('.containerHis').append(salecollectionview.el);
}
render: function(){
var customerProfile = _.template(CustomerProfile);
$(this.el).html(customerProfile);
}
});
return CustomerView;
});
saleTemplate.html
<td><%= QuotationID %></td>
<td><%= QuotationNumber %></td>
Комментарии:
1. В чем собственно вопрос? Сохраните json в localstorage, извлеките его обратно и вставьте в конструктор.
2. Я просто не знаю, как это сделать….
Ответ №1:
Вы можете создавать магистральные модели / коллекции из любого источника данных. Вот пример из localStorage:
var Book = Backbone.Collection.extend();
var Library = Backbone.Collection.extend({
model: Book
});
var model = new Book(JSON.parse(localStorage.getItem('book')));
var collection = new Library(JSON.parse(localStorage.getItem('books')));
Чтобы сохранить в localStorage, вы могли бы сделать это следующим образом:
localStorage.setItem('book', JSON.stringify(Book.toJSON()));
localStorage.setItem('books', JSON.stringify(Library.toJSON()));
Надеюсь, это поможет.
Комментарии:
1. Я понимаю… так что, если localStorage выглядит так
{"UID": "00000000-0000-0000-0000-00000000006e","RedeemData": [],"AgingData": [],"HistoryData": [{"QuotationID": "00000000-0000-0000-0000-0000000001de","QuotationNumber": "891115-0001"},{"QuotationID": "00000000-0000-0000-0000-0000000001df","QuotationNumber": "891213-0001"},.....{}]}
, я хочу отобразить его изHistoryData
списка.2. Я имею в виду, я хочу получить
QuotationID
иQuotationNumber
изHistoryData
.3. Затем вам нужно будет проанализировать JSON и создать объект только с теми значениями, которые вы хотели бы.
4. Не могли бы вы показать мне какой-нибудь пример по этому поводу? Извините, я действительно новичок в этом. Заранее спасибо.
5. Я считаю, что это отдельная проблема, пожалуйста, примите ответ или перефразируйте свой вопрос, потому что я считаю, что на него был дан ответ. Если у вас есть вопросы о том, как выбрать определенные атрибуты из массива объектов, возможно, почитайте Lodash,
_.map
, и_.pick
вам придет в голову что-то вроде_.map(arr, function(val) { return _.pick(val, ['QuotationNumber', 'QuotationID']); });
. Надеюсь, это поможет.
Ответ №2:
Хотя я не совсем понимаю, каковы ваши точные ожидания. Но я предположил следующим образом.
- Вы создали коллекцию, в которой хотите сохранить текущую / текущую коллекцию в переменной localStorage. (или) Вы хотели сохранить текущие / текущие данные коллекции в localStorage перед отправкой их на сервер с помощью функции sync().
- Вы сохранили коллекцию с помощью window.localStorage.setItem … следующим образом
var bookModel = Backbone.Model.extend({}); var bookCollection = Backbone.Collection.extend({ // Your rest of the functions goes here... sync: function(method, collection, options) { switch(method) { case 'create': window.localStorage.setItem('myCurrentCollection' , JSON.stringify(collection)); break; case 'update': window.localStorage.setItem('myCurrentCollection' , JSON.stringify(collection)); break; } } });
- Теперь в определенном представлении вы хотите получить и отобразить значение localStorage.
<% var collectionValue = window.localStorage.getItem('myCurrentCollection'); _.each(collectionValue.toJSON(), function(data){ %> <td> <% = data.Id %> </td> <td> <% = data.name %> </td> <%});%> //your parse and show code goes here...
Надеюсь, это поможет вам, если мое предположение верно.
Комментарии:
1. Но, конечно, я просто хочу использовать localStorage для отображения в моем представлении при загрузке страницы после поиска пользователя… вместо этого в представлении будут отображаться данные из модели.
2. коллекция — это только группа моделей. Попробуйте добавить много моделей, затем сохраните их в localStorage как коллекцию. После этого извлеките то, что вы хотели.