1

私は次のモデルを持っています:

var Car = Backbone.Model.extend({
    url: "/save.php",
    defaults: {
        color: "red"
    }
});

ドキュメントの準備ができたら、モデルの新しいインスタンスを作成して保存します。

new volvo = new Car({color:"green"});
volvo.save();

次に、サーバーで新しい車に ID を割り当て、それをクライアント (PHP を使用) に返します。

$request_method = strtolower($_SERVER['REQUEST_METHOD']);

switch ($request_method) {
    case 'post':
        $data = json_decode(file_get_contents('php://input'));
        $color = $data->{'color'};
        $car = array('id'=>1, 'color'=>$color);
        echo json_encode($car); //I use this to send the response to the client
                               //but I am not sure if this is the right way
    break;

    case 'put':
        //code to handle this case
    break;
}

問題は、車のモデル volvo の新しいインスタンスを更新したい場合、backbone は volvo が常に新しいモデルであると想定しているため、POST で要求が行われますが、既存のモデル volvo を更新したいということです。これ:

new volvo = new Car({color:"green"});
volvo.save();

console.log( volvo.attributes ); //in here an id appears
console.log( volvo.get('id') ); //this returns 'undefined' 

volvo.save({color:"red"}); //this saves in the database a new model, not desired

これはなぜですか?

ありがとう

4

2 に答える 2

2

この例を確認してください:

var volvo = new Car({color:"green"});

// Create a new car model.
console.log(volvo.isNew());  // Output: true
volvo.save();

console.log(volvo.isNew());  // Output: false
console.log(volvo.id);   // Output: 1
// Update the color of the already created model to red.
volvo.save({color:"red"});

コードの別の部分で既に作成されたモデルを取得したい場合は、ID を知る必要があります。

var volvo = new Car({id: 1});

// Update the model.
console.log(volvo.isNew());  // Output: false
volvo.save({color: "blue"});

注: サーバーは、id で作成されたモデルのJSONを返す必要があります。

これが役に立ったことを願っています:)

于 2012-06-08T13:23:49.630 に答える
1

ポストレスポンスで実際にid属性を送信していることを確認してください。IDのないモデルは新規と見なされるため、保存時に更新されるのではなく作成されます。

于 2012-06-08T13:10:08.723 に答える