2015-09-10 3 views
0

Я новичок в позвоночнике и теперь испытываю проблемы с позвоночником js и backbone.validation. Вот мой код:Backbone js отображает старые модели

var EmployeeCreateView = Backbone.View.extend({ 
    el: "#page_content", 

    initialize: function() { 
     console.log("initializing...."); 
     this.model = new EmployeeModel(); 
     console.log(this.model); 
     this.render(); 
    }, 

    render: function() { 
     Backbone.Validation.bind(this); 

     this.$el.html(EmployeeCreateTemplate); 
    }, 

    events: { 
     "click #submit-employee": "submitEmployee" 
    }, 

    submitEmployee: function(e) { 
     e.preventDefault(); 
     var data = Backbone.Syphon.serialize(this); 

     this.model.set(data, { validate: true }); 
     console.log(this.model); 
     if (!this.model.isValid()) { 
      _.each(this.model.validationError, function (error) { 

      }); 
     } else { 
      this.model.save(null, { 
       success: function() { 
        new EmployeeCollectionView(); 
       }, 
       error: function(model, response) { 
        this.$el.html(ErrorTemplate)({ 
         error: response.responseText 
        }); 
       } 
      }); 
     } 
    } 
}); 

Что происходит, когда я иду на эту страницу как console.log() дисплей одну модель, что все хорошо. Но когда я покидаю страницу и возвращаюсь снова, console.log() в инициализации показывает одну модель, которой я хочу. Но console.log на функции submitEmployee() отображает две модели. Вот консольный вывод:

// first page load, shows a single object 
initializing.... 
n {cid: "c2", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…} 
// other page load 
[n, n, n, n, n] 
// back to original page, shows a new object 
initializing.... 
n {cid: "c10", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…} 
// submit still sees both objects, which i don't want 
n {cid: "c2", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…} 
n {cid: "c10", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…} 

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

Спасибо!

ответ

1

У вас есть объекты зомби - объекты, которые должны были быть очищены, но висели из-за ссылок и выскакивали, чтобы укусить вас позже.

Часть проблемы заключается в том, как вы управляете представлениями. Сделать представление рендеринга - плохая идея. Наличие представления, создающего дочерний вид, который делает себя для замены текущего представления, является еще более худшей идеей. Проблемы, которые вы видите, являются прямым результатом этой структуры кода.

Я рекомендую две статьи, чтобы начать:

managing page transitions in Backbone.js

и

Making workflow explicit in JavaScript

+0

Спасибо большое за помощь! которые поставили меня в правильном направлении –

Смежные вопросы