2013-06-14 5 views
4

Если я пытаюсь создать запись с чем-то вродеУстановка идентификатора в Ember данных с createRecord

var myObject = App.ModelName.createRecord(data); 
myObject.get("transaction").commit(); 

идентификатор MyObject никогда не устанавливается.

This говорит, что генерация id должна обрабатываться EmberData (первый ответ). Так что же должно быть? Где определяется новый идентификатор. Должен ли быть обратный вызов API для получения действительного идентификатора?

ответ

2

ID - это первичный ключ для вашей записи, который создается вашей базой данных, а не Ember. Это структура JSON подчиняется сообщению REST, не замечает идентификатор.

{"post":{"title":"c","author":"c","body":"c"}} 

В вашем REST Post функции вы должны получить последний вставить ID и вернуть его обратно с остальной частью модели данных в Эмбер, используя эту следующую структуру JSON. Обратите внимание на идентификатор, который является последним идентификатором вставки. Вы должны получить этот последний идентификатор вставки вручную, используя ваш DB api.

{"post":{"id":"20","title":"c","author":"c","body":"c"}} 

Это мой пример кода для моего сообщения REST. Я закодированы это с помощью PHP REST Стройных рамок:

$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 
     //); 
    } 
} 
2

С некоторым REST адаптерами, такими как Firebase, вы можете определить идентификатор в качестве переменной записи вы собираетесь создать.

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" 
    } 
} 
Смежные вопросы