Я делаю Rails-приложение, используя Backbone на интерфейсе. У меня есть две точки зрения: одна для модели публикации и одна для модели статьи. В представлении «Публикация» есть функция «createFeed», которая запускается, когда пользователь заполняет форму и нажимает кнопку. Когда это произойдет, я бы хотел, чтобы база данных обновлялась, а затем для двух представлений, чтобы получить повторную визуализацию. Пока не повезло.Backbone update Views
Вот функция маршрутизатора Backbone, что изначально делает обе точки зрения:
home: function(){
var publications = new SimpleGoogleReader.Collections.Publications();
publications.fetch({
success: function(publications){
var view = new SimpleGoogleReader.Views.PublicationsIndex({model: publications});
view.render();
}
});
var articles = new SimpleGoogleReader.Collections.Articles();
articles.fetch({
success: function(articles){
var view = new SimpleGoogleReader.Views.ArticlesIndex({model: articles});
view.render();
}
});
},
Это функция createFeed в моей публикации Просмотр в Backbone. Почтовые запросы работают нормально, теперь просто пытаются выяснить, как обновить представления.
createFeed: function(e){
e.preventDefault();
var feed_url = $('#new_feed_name').val();
$.post('/publications', {url: feed_url}, function(){
$.post('/articles/force_update', {feed_url: feed_url}, function(){
// should I put something here?
});
});
}
Я попытался скопировать код у меня есть в моей домашней функции маршрутизатора в функцию обратного вызова для createFeed, который обновляется статьи только штраф, но вызвал проблемы при обновлении зрения публикации, я думаю, потому, что имея вид визуализации себя из одной из своих функций. Я также пытался включить это в представление, но не работал.
initialize: function() {
this.listenTo(this.model, "change", this.render);
},
Как получить createFeed для обновления обоих представлений после отправки правильных данных в базу данных?
Любой ввод оценивается!
* UPDATE *
Rida BENHAMMANE и Джон Макмиллан спасибо за вход.
Я теперь обновить функцию «домашнего» маршрутизатора как таковой:
home: function(){
var publications = new SimpleGoogleReader.Collections.Publications();
var articles = new SimpleGoogleReader.Collections.Articles();
var pubIndex = new SimpleGoogleReader.Views.PublicationsIndex({model: publications});
var artIndex = new SimpleGoogleReader.Views.ArticlesIndex({model: articles});
// create a method to replace the force_update post in your publications view
articles.listenTo(publications, "add", articles.force_update);
publications.fetch();
articles.fetch();
},
и функция createFeed с моей точки зрения публикации, как это:
createFeed: function(e){
e.preventDefault();
var feed_url = $('#new_feed_name').val();
this.model.create({
url: feed_url
});
}
Это по предложению Джона. Он отлично работает с точки зрения публикации и представления публикации. Конечно, теперь мне нужно написать код для публикации статей и обновить его в соответствии с комментарием Джона.
Это что-то, что я должен делать отдельно в представлении «Статьи»? Или я могу сделать это здесь, в моей функции createFeed в представлении «Публикация»? Если я сделаю это отдельно, у меня теперь будет два представления, имеющие функции для одного и того же события?
РЕШЕНИЕ! *
вид индекс публикации
initialize: function() {
this.listenTo(this.model, "sync", this.render);
},
render: function(){
this.$el.html(this.template({publications: this.model.toJSON()}));
return this;
},
createFeed: function(e){
e.preventDefault();
var feed_url = $('#new_feed_name').val();
var that = this;
this.model.create(
{url: feed_url},
{ success: function(data){
$.post('/articles/force_update', {url: feed_url, publication_id: data.id}, function(data){});
}
}
);
}
Публикация Router
home: function(){
var publications = new SimpleGoogleReader.Collections.Publications();
var articles = new SimpleGoogleReader.Collections.Articles();
var pubIndex = new SimpleGoogleReader.Views.PublicationsIndex({model: publications});
var artIndex = new SimpleGoogleReader.Views.ArticlesIndex({model: articles});
//method to replace the force_update post in your publications view
articles.listenTo(publications, "sync", function(){
// var articles = new SimpleGoogleReader.Collections.Articles();
articles.fetch({success: function(){}});
});
publications.fetch();
},
я могу двигаться дальше со своей жизнью после того, как два дня. Лол. Спасибо за введение, ребята!!
Это сработало! Мне нужно потратить время, чтобы ознакомиться с методом рендеринга. – user2623706
Вам нужно, чтобы новая публикация закончила создание (ответ от сервера) перед публикацией в статьях? – mcwilli
Да, да. Я задал новый вопрос: http://stackoverflow.com/questions/21821134/backbone-shall-i-use-sync-or-jquery-can-i-listen-for-either/21824742?noredirect=1#21824742 – user2623706