Ember.js 使用createRecord在余烬数据中设置id
如果我尝试用以下内容创建一个记录Ember.js 使用createRecord在余烬数据中设置id,ember.js,ember-data,Ember.js,Ember Data,如果我尝试用以下内容创建一个记录 var myObject = App.ModelName.createRecord( data ); myObject.get("transaction").commit(); myObject的id从未设置 表示id生成应由EmberData处理(第一个响应)。那么应该发生什么呢?新id在哪里确定。是否应该回调API以获取有效id?id是记录的主键,该记录是由数据库而不是由Ember创建的。这是JSON结构提交到REST帖子,注意没有ID {"post":{
var myObject = App.ModelName.createRecord( data );
myObject.get("transaction").commit();
myObject的id从未设置
表示id生成应由EmberData处理(第一个响应)。那么应该发生什么呢?新id在哪里确定。是否应该回调API以获取有效id?id是记录的主键,该记录是由数据库而不是由Ember创建的。这是JSON结构提交到REST帖子,注意没有ID
{"post":{"title":"c","author":"c","body":"c"}}
在REST Post函数中,必须获取最后一个insert ID,并使用以下JSON结构将其与模型数据的其余部分一起返回给Ember。请注意ID,这是最后一个插入ID。必须使用DB api手动获取最后一个插入ID
{"post":{"id":"20","title":"c","author":"c","body":"c"}}
这是我的REST帖子的示例代码。我使用PHP REST Slim框架对此进行了编码:
$app->post('/posts', 'addPost'); //insert new post
function addPost() {
$request = \Slim\Slim::getInstance()->request();
$data = json_decode($request->getBody());
//logging json data received from Ember!
$file = 'json1.txt';
file_put_contents($file, json_encode($data));
//exit;
foreach($data as $key => $value) {
$postData = $value;
}
$post = new Post();
foreach($postData as $key => $value) {
if ($key == "title")
$post->title = $value;
if ($key == "author")
$post->author = $value;
if ($key == "body")
$post->body = $value;
}
//logging
$file = 'json2.txt';
file_put_contents($file, json_encode($post));
$sql = "INSERT INTO posts (title, author, body) VALUES (:title, :author, :body)";
try
{
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("title", $post->title);
$stmt->bindParam("author", $post->author);
$stmt->bindParam("body", $post->body);
$stmt->execute();
$insertID = $db->lastInsertId(); //get the last insert ID
$post->id = $insertID;
//prepare the Ember Json structure
$emberJson = array("post" => $post);
//logging
$file = 'json3.txt';
file_put_contents($file, json_encode($emberJson));
//return the new model back to Ember for model update
echo json_encode($emberJson);
}
catch(PDOException $e)
{
//$errorMessage = $e->getMessage();
//$data = Array(
// "insertStatus" => "failed",
// "errorMessage" => $errorMessage
//);
}
}
使用一些REST适配器,例如Firebase,您可以将id定义为要创建的记录的变量
App.User = DS.Model.extend({
firstName: DS.attr('string')
});
var sampleUser = model.store.createRecord('user', {
id: '4231341234891234',
firstName: 'andreas'
});
sampleUser.save();
数据库中的JSON(Firebase)
"users": {
"4231341234891234": {
"firstName": "andreas"
}
}