模型没有被推入中枢

用户名

jsfiddle

我现在正在尝试使用本教程创建一个消息客户端,当在该字段中键入新消息并单击添加按钮时,应该更新视图。由于某种原因,“ addMessage”事件无法将新模型添加到集合中。

var messagesjson = [
  { 
    id: 3,
    message: "This is the message",
    sender: "gabriel",
    receiver: "gabriel",
    has_been_read: false,
    has_been_reported: false,
    created_at: "2014-10-23T19:55:20+0200",
    is_friend: false
  },
  {
    id: 5,
    message: "I'm loving this ",
    sender: "gabriel",
    receiver: "gabriel",
    has_been_read: true,
    has_been_reported: false,
    created_at: "2014-10-23T20:02:34+0200",
    is_friend: false
  }];

var MessageModel = Backbone.Model.extend({
  defaults:
  {
    id: 3,
    message: "This is the message",
    sender: "gabriel",
    receiver: "gabriel",
    has_been_read: false,
    has_been_reported: false,
    created_at: "2014-10-23T19:55:20+0200",
    is_friend: false
  }
});

var MessageView = Backbone.View.extend({
  tagName: "div",
  className: "listview",
  template: $('#messageTemplate').html(),
  render: function()
  {
    var tmpl = _.template(this.template);
    console.log(this.model);
    this.$el.html(tmpl(this.model.toJSON()));
    return this;
  }
});

var MessageCollection = Backbone.Collection.extend({
  model: MessageModel
});

var MessageCollectionView = Backbone.View.extend({
  el: $('#messages'),
  initialize: function()
  {
    this.collection = new MessageCollection(messagesjson);
    this.render();
    this.collection.on("add", this.renderMessage, this);
  },
  render: function()
  {
    var that = this;
    _.each(this.collection.models, function(item){
      that.renderMessage(item);
    },this);
  },
  events:{
    "click #add":"addMessage"
  },
  renderMessage: function(item)
  {
    var messageview = new MessageView({
      model: item
    });

    this.$el.append(messageview.render().el);
  },
  addMessage: function(e)
  {
    e.preventDefault();
    var formData = {};

    $("#addMessage").children("input").each(function (i, el) {
      formData[el.id] = $(el).val();
    });

    messagesjson.push(formData);
    this.collection.add(new MessageModel(formData));

    console.log(messagesjson);
  }
});

var messagecollectionview = new MessageCollectionView();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>
<div id="messages">  
  <form id="addMessage" action="#">
    <div>
      <label for="messageText">Message: </label>
      <input id="messageText" type="text" />
      <button id="add">Add</button>
    </div>
  </form>
</div>

<script type="text/template" id="messageTemplate">
  <a href="#" class="list autoWidth <% if(has_been_read) { %> selected <% } %>">
    <div class="list-content">
      <img src="//www.polyvore.com/cgi/img-thing?.out=jpg&size=l&tid=20774792" class="icon">
      <div class="data">
      <span class="item-title-secondary fg-gray"><b><%= sender %></b></span>
    </div>
    <span class="tertiary-text">
      <%= message %>
    </span>
    </div>
  </a>
</script>

丹尼尔·JG

您将所有新模型的ID设置为3,因为您的默认哈希值包含id: 3该集合认为它是相同的模型,因为它已经有一个具有该ID的模型。

因此,首先您需要使用以下命令更改默认值id:null

var MessageModel = Backbone.Model.extend({
    defaults:{
        id: null,
        message: "This is the message",
        sender: "gabriel",
        receiver: "gabriel",
        has_been_read: false,
        has_been_reported: false,
        created_at: "2014-10-23T19:55:20+0200",
        is_friend: false
    }
});

然后,您需要修复获取formData的代码。首先,您使用的是jQuerychildren()方法,该方法仅查看直接子代。这意味着您将永远不会获得表单内部的输入,因为存在一个中间div。您可以使用find

其次,您需要确保formData具有名为的属性,message以便可以覆盖default message: "This is the message"我将name属性添加message到input元素,并像那样使用它formData[el.name] = $(el).val();(您以后可以使用jqueryserializeObject插件之一以这种方式自动序列化所有输入元素)。

因此,addMessage将如下所示:

addMessage: function(e){
    e.preventDefault();
    var formData = {};

    $("#addMessage").find("input").each(function (i, el) {
        formData[el.name] = $(el).val();
    });                

    messagesjson.push(formData);
    this.collection.add(new MessageModel(formData));
}

你可以在这个小提琴中尝试

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

没有路线与[GET] /用户匹配

分類Dev

django的“ unicode”对象没有属性“ size”

分類Dev

sudo没有密码中断其他sudo -u的使用

分類Dev

“ * apply”家庭真的没有向量化吗?

分類Dev

没有从LPM3唤醒,ACLK出现故障

分類Dev

JavaScript:交换没有临时变量的字符串变量

分類Dev

骨干没有调用路由器功能吗?

分類Dev

DrRacket没有运行SICP练习1.10中的Ackermann功能

分類Dev

新安装的Windows 7-没有Internet连接

分類Dev

教义2选择没有或少于关系的实体

分類Dev

Django模型表單字段基於條件有一個用戶下拉列表

分類Dev

將可跟踪(設計)添加到現有用戶模型?

分類Dev

有没有更好的方法来减去和字段而不在PostgreSQL中再次求和

分類Dev

有没有办法恢复未提交的git工作树?

分類Dev

有没有办法将命令映射到键盘以在Windows中打开程序或文件?

分類Dev

是否可以在没有root用户访问权限的情况下更改文件的所有权?

分類Dev

当上面没有任何东西时,UISegmentedControl难以处理

分類Dev

useEffect无法在没有刷新的自定义抽屉组件中工作

分類Dev

在Samba中创建用户-Debian 6 32bit-没有命令可用吗?

分類Dev

Ubuntu Server 12.04 LTS上没有互联网连接

分類Dev

解析云代码获取错误失败:TypeError:对象0没有方法'set'

分類Dev

Taiga'i586-linux-gnu-gcc':没有这样的文件或目录

分類Dev

如何在没有基础数据的情况下从 ROC 图计算 AUC?

分類Dev

Javascript。如何创建一个创建对象的循环,然后将这些对象推入数组?

分類Dev

当本地计算机实际上没有ssh时,SSH可以通过防火墙建立隧道

分類Dev

在没有原型的文件中调用的函数在 ARM 和 x86-64 上产生不同的结果

分類Dev

kdb q 根据另一张表的数据查询一张表的数据,没有join

分類Dev

有没有一种方法可以使用Vue-Router从动态URL中删除目录?

分類Dev

有没有一种方法可以将JAX-RS资源链接到另一个资源(如Spring HATEOAS)?

Related 関連記事

  1. 1

    没有路线与[GET] /用户匹配

  2. 2

    django的“ unicode”对象没有属性“ size”

  3. 3

    sudo没有密码中断其他sudo -u的使用

  4. 4

    “ * apply”家庭真的没有向量化吗?

  5. 5

    没有从LPM3唤醒,ACLK出现故障

  6. 6

    JavaScript:交换没有临时变量的字符串变量

  7. 7

    骨干没有调用路由器功能吗?

  8. 8

    DrRacket没有运行SICP练习1.10中的Ackermann功能

  9. 9

    新安装的Windows 7-没有Internet连接

  10. 10

    教义2选择没有或少于关系的实体

  11. 11

    Django模型表單字段基於條件有一個用戶下拉列表

  12. 12

    將可跟踪(設計)添加到現有用戶模型?

  13. 13

    有没有更好的方法来减去和字段而不在PostgreSQL中再次求和

  14. 14

    有没有办法恢复未提交的git工作树?

  15. 15

    有没有办法将命令映射到键盘以在Windows中打开程序或文件?

  16. 16

    是否可以在没有root用户访问权限的情况下更改文件的所有权?

  17. 17

    当上面没有任何东西时,UISegmentedControl难以处理

  18. 18

    useEffect无法在没有刷新的自定义抽屉组件中工作

  19. 19

    在Samba中创建用户-Debian 6 32bit-没有命令可用吗?

  20. 20

    Ubuntu Server 12.04 LTS上没有互联网连接

  21. 21

    解析云代码获取错误失败:TypeError:对象0没有方法'set'

  22. 22

    Taiga'i586-linux-gnu-gcc':没有这样的文件或目录

  23. 23

    如何在没有基础数据的情况下从 ROC 图计算 AUC?

  24. 24

    Javascript。如何创建一个创建对象的循环,然后将这些对象推入数组?

  25. 25

    当本地计算机实际上没有ssh时,SSH可以通过防火墙建立隧道

  26. 26

    在没有原型的文件中调用的函数在 ARM 和 x86-64 上产生不同的结果

  27. 27

    kdb q 根据另一张表的数据查询一张表的数据,没有join

  28. 28

    有没有一种方法可以使用Vue-Router从动态URL中删除目录?

  29. 29

    有没有一种方法可以将JAX-RS资源链接到另一个资源(如Spring HATEOAS)?

ホットタグ

アーカイブ