2014-10-15 3 views
0

Я новичок в backbonejs Я могу добавлять и показывать контакты из базы данных. но я не могу выполнить удаление с помощью backbonejs. JSFiddle http://jsfiddle.net/L183kw0o/10/ При попытке удалить это дает мне ошибкуBackboneJS Uncaught ReferenceError: переменная не определена

"Uncaught ReferenceError: Id is not defined " 

Ниже StackTrace (анонимная функция) VM103: 2 InjectedScript._evaluateOn VM69: 730 InjectedScript._evaluateAndWrap VM69: 669 InjectedScript.evaluate VM69: 581

Это моя модель

var modelContact = Backbone.Model.extend({ 
    defaults: function() { 
     return { 
      Id: 0, 
      Name: "", 
      Address: "" 
     }; 
    }, 
    idAttribute: "Id", 
    url: function(){ 
     return 'api/Contact/' + this.get("Id"); 
    }, 
    initialize: function() { 
     if (!this.get("Id")) { 
      this.set({ "Id": this.defaults().Id }); 
     } 
    }, 
    clear: function() { 
     console.log(this.get("Id")); 
     this.destroy({ 
      error: function(model, response) { 
       alert("error"); 
      }, 
      success: function(model, response) { 
       alert("success"); 
       console.log(response); 
      } 
     }); 
    } 
}); 

Модель Коллекция

var contactCollection = Backbone.Collection.extend({ 
    model: modelContact, 
    url: function() { 
     return 'api/Contact'; 
    } 
}); 
var contacts = new contactCollection; 

Посмотреть

var contactView = Backbone.View.extend({ 
    tagName: "tr", 
    events: { 
     "click a.destroy": "clear" 
    }, 
    template: _.template($("#newContacttemplate").html()), 
    initialize: function() { 
     this.model.on("change", this.render, this); 
     this.model.on('destroy', this.remove, this); 
    }, 
    render: function() { 
     if (this.isGoingToBeRemoved) { 
      return (this); 
     } 
     this.$el.html(this.template(this.model.toJSON())); 
     return this; 
    }, 
    clear: function (e) { 
     this.isGoingToBeRemoved = true; 
     this.model.clear(); 
    } 
}); 

Все ошибки будут решены, это рабочий код

+0

Какую версию Backbone вы используете? –

+0

Backbone.js 1.1.2 –

+0

Вы переопределяете «clear» [метод] модели Backbone Model (http://backbonejs.org/#Model-clear). – Maroshii

ответ

1

Проблема приходят из "визуализации".

Действительно, Вы устанавливаете значение и вы стираете модель:

clears: function (e) { 
     console.log(e); 
     console.log(this.model); 
     this.model.set({ // trigger change 
      Id: 3 
     }); 
     this.model.get("Id"); 
     this.model.clear(); // remove your model 
    } 

Потому что, JS является асинхронным, вы будете иметь «визуализацией» и «ясно» называли в то же время. И когда вы будете называть this.$el.html(this.template(this.model.toJSON())); model.get («Id») будет уже удален .. Таким образом, вы пытаетесь вызвать что-то, что не существует

render: function() { 
    // console.log(this.model.toJSON()); 
    this.$el.html(this.template(this.model.toJSON())); // this.model.toJSON() == {} 
    return this; 
}, 

Вы должны предотвратить метод визуализации, когда вы «очистить» вашу модель.

+0

удален Просьба проверить эту скрипту http://jsfiddle.net/ssgexu1y/ В функции очистки я удалил весь код exc ept this.model.clear(); // Но такая же ошибка :( –

+0

Попробуйте следующее: http://jsfiddle.net/L183kw0o/5/ –

+0

ОК, эта скрипка определенно удалила ошибку, но мои изменения не отправлены обратно на сервер. –

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