从服务器创建模型

时间:2014-08-09 04:38:44

标签: backbone.js asynchronous

我找到了如何更新模型的示例。示例如下所示:

   var Sidebar = Backbone.Model.extend({
      param:'sasha',
      time:(new Date()).getTime()
    });

    window.sidebar = new Sidebar;
    sidebar.set("name","sasha");
    sidebar.set("time",(new Date()).getTime())
    Backbone.sync("update",sidebar,{
      url:'1.php',
      success:function(data){
        debugger
        console.log('success');
        sidebar.set('rand',data.b)
      },
      error:function(){
        console.log('error')
      }
    })

1.PHP

$time =  rand();
$arr = array('a' => 1, 'b' => $time);

echo json_encode($arr);  

我找不到查询“创建”的示例。 帮助从服务器创建一代新模型?

我读到有一个描述这个过程的属性是一个属性“id”......我想看到它。

1 个答案:

答案 0 :(得分:2)

你并没有真正按照设计使用Backbone:P

首先要意识到的是,当您执行Model.extend时,您正在为模型创建constructor / prototype / blueprint,而不是实际的instance新模型。

它包含方法和属性,这些方法和属性是模型的所有实例的元数据。一个" meta"的例子。财产将是:

  • url:您将要对其执行操作的网址。
  • parse:"解包"的功能响应(例如:如果它有一个外部"数据"包装器)

这些属性都不是模型的实际属性。他们只是对他们采取行动的元。

拥有构造函数后,您可以使用new创建新模型。

var Sidebar = Backbone.Model.extend({
  url:'1.php'
});

var sidebar = new Sidebar({
    param:'sasha',
    time:(new Date()).getTime()
});

Backbone的updatecreate之间的区别在于存在ID元素(主键)。这是您在数据库中识别它的方法。您可以使用.save()创建模型并进行更新

//Will create the model on the server by doing a `POST` to the `url`
sidebar.save();

这将有效地做到:

POST 1.php
{
   "param": "Sasha",
   "date": 12312311228
}

服务器响应模型的副本和ID来识别它(来自数据库的ID)

{
   "id": 123,
   "param": "Sasha",
   "date": 12312311228
}

Backbone将获取ID并将其保存到模型中。从saveUPDATE而不是POST

所以:

model.save({new:'attribute'});

UPDATE 1.php
{
   "id": 123,
   "new": "attribute",
   "param": "Sasha",
   "date": 12312311228
}