簡體   English   中英

骨干模型.save()覆蓋先前的模型

[英]Backbone model.save() overwrite previous model

保存模型時出現問題。 而是用新的cdi創建一個新模型,我總是得到相同的cd1,看來我的模型只是覆蓋了以前的模型。

這是我的簡單注冊表格:

HTML

<form class="form-signin">
      <h2 class="form-signin-heading">Please sign in</h2>
      <label for="inputName" class="sr-only">Name</label>
      <input type="text" id="inputName" class="form-control" placeholder="Name" required autofocus>
      <label for="inputSurname" class="sr-only">Surname</label>
      <input type="text" id="inputSurname" class="form-control" placeholder="Surname" required autofocus>
      <label for="inputNickname" class="sr-only">Nickname</label>
      <input type="text" id="inputNickname" class="form-control" placeholder="Nickname" required autofocus>
      <label for="inputEmail" class="sr-only">Email address</label>
      <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
      <label for="inputPassword" class="sr-only">Password</label>
      <input type="password" id="inputPassword" class="form-control" placeholder="Password" required>
      <div class="checkbox">
        <label>
          <input type="checkbox" value="remember-me"> Remember me
        </label>
      </div>
      <span id="btn-submit" class="btn btn-lg btn-primary btn-block" type="submit"> Sign in </span>
    </form>

模型:

var User = Backbone.Model.extend({
defaults: {
    inputName: "",
    inputSurname: "",
    inputNickname: "",
    inputEmail: "",
    inputPassword: "",
    rememberMe: false
},
url: 'src/users.json'

});

視圖:

var SignupView = Backbone.View.extend({

events: {
    'keypress input': 'getInputs',
    'click #btn-submit': 'saveInputs'
},

initialize: function() {
    // Make sure functions are called in the right scope
    _.bindAll(this, 'saveInputs');

    // Listen to model changes
    // this.model.bind('change', this.edit)
},

getUser: function(cid) {
    return this.model
},

saveInputs: function(evt) {
    evt.preventDefault();

    var model = this.model;

    this.$el.find('input[id]').each(function() {
        model.set( this.id, this.value );
    });
    this.model.save();
    console.log(model);

    this.$el.find('input').each(function() {
        this.value = ""
    });
}

});

采集:

   var Searchers = Backbone.Collection.extend({
    model: User
});

還有我的app.js

 var SignUp = Backbone.View.extend({
    el: '.container'
});

var userModel = new User();
var searchersCollection = new Searchers();
searchersCollection.bind('change', function(rec){
    console.log('A record was changed:' + rec);
});


var signupView = new SignupView({
    el: $(".form-signin"),
    model: userModel
});

var signup = new SignUp();

因此,如果用戶在表單中鍵入他的數據,然后我在Web控制台中點擊:

userModel

子項{cid:“ c1”,屬性:對象,_changing:否,_previousAttributes:對象,已更改:對象…}

但是,如果新用戶輸入新數據,然后再次檢查Web控制台:

userModel

子項{cid:“ c1”,屬性:對象,_changing:否,_previousAttributes:對象,已更改:對象…}

我得到了相同的CID,我的userModel中只有一個模型,而屬性是最后一個引入的模型。 我需要的是保存我的所有用戶,而不是覆蓋他們,並能夠訪問他們。通過我的模型嗎?

我不明白我錯了:/

cid表示ClientID,在創建模型對象時分配。 U應使用“ idAttribute”定義遠程ID字段。

據我了解,您需要的是集合,而不是模型。

模型代表單個實體,例如書或用戶。 模型的save方法是將其數據與持久層同步,並使用從其返回的數據進行更新

集合是模型的集合。 如果您希望每次用戶保存表單時都使用不同的cid創建新模型,則應addadd到集合中,主干將初始化在集合的model屬性中指定的model的新實例,並將其添加到集合中。

由於您具有一組用戶實體,因此應將一個集合指向users.json ,而不是模型。

var Searchers = Backbone.Collection.extend({
    url: 'src/users.json',
    model: User
});

而且,您應該傳遞該類型的模型的集合,而不是單個模型:

var signupView = new SignupView({
  el: $(".form-signin"),
  collection: searchersCollection
});

然后在save方法中將應作為新模型添加的數據傳遞給collections add方法:

saveInputs: function(evt) {
  evt.preventDefault();
  this.collection.add({
    name: "",
    age: ""
  });
}

還要注意,您需要調用fetch方法,以便從端點填充集合。

我建議您仔細閱讀文檔和教程,因為您似乎仍然需要了解基礎知識。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM