3

次のバックボーンモデルがあります

var Page = Backbone.Model.extend({
    defaults: {
        id: null,
        metadata: {
            name: '',
            title: '',
            ...
        },
        children: []
        parent: null
    },
    urlRoot: '/api/page',
    initialize: function () {}
});

次のフォームを保存するときは、このフォームの JSON 表現を作成し、サーバーに保存する前にバックボーン モデルを更新する必要があります。フォームが動的に作成されるため、フォーム名を探すためのハードコーディングされたセレクターを使用できないため、これを行う必要があります。以下はフォームの例です。

<form>
    <label>Name:</label>
    <input type="text" name="metadata.name" value="">
    <label>Title:</label>
    <input type="text" name="metadata.title" value="">
    <label>Slug:</label>
    <input type="text" name="metadata.slug" value="">
    <label>Url:</label>
    <input type="text" name="metadata.url" value="">
    <button type="submit">Save</button>
</form>

HTML フォーム データに基づいてバックボーン モデルを更新する最も効率的な方法は何ですか?

編集

オブジェクト間のドットの代わりに角括弧を使用して、この回答を stackoverflow で見つけました。この手法はかなりうまく機能すると思いますが、ドット表記を使用してフォームをシリアル化する同様の方法があるでしょうか?

4

2 に答える 2

2

フォームを JavaScript オブジェクトに変換するために、このきちんとした小さなライブラリを使用することになりました

于 2013-03-29T21:35:24.603 に答える
-1

あなたが何を考えているかを考えて、Modelデフォルトを削除し、常にそこにあるフィールドを残します(またはピリオドを削除します)。これらのフィールドは現時点では不明であるため、ケースのシナリオではデフォルトを設定することは理想的ではありません。技術的に言えば、 はModel任意のフィールドに更新でき、サーバーからフィードするフィールドに適応します。

重要な段階は、Model最初に を設定することです。これにより、 に含まれる属性が決まるからModelです。フォームは動的に作成されると述べたので、Modelレンダリングしているフォームに付随するデータを表す JSON オブジェクトを介して作成できます。

サーバーに保存するときModelは、更新に必要なすべての属性が含まれています。それが最初の方法です。

model.save();

またはForm、変更を保存するときに全体をシリアル化することもできます。基本的に、Model実行時に新規作成します。

var form= $('#myForm'); 
var data = JSON.stringify(form.serializeArray());

/**Create a new instance of the Model then and perform an update. */
var model = new MyModel(data);
model.save();
于 2013-03-29T19:43:34.127 に答える