0

ワークフローのバックボーン設定があります。ページにはいつでも複数のワークフロー/モデルが表示されます。ワークフローがまだ開始されていない場合(つまり、データベースにない場合)、新しいモデルとして表示されます。フェッチされたモデルをビューに渡すのに問題があります。見た目のコレクションではなく、属性のみを渡していますか?誰かアイデアはありますか?

データベースからすべてのワークフローをフェッチすると、ワークフローの進行状況のJSON配列が返されます。

[{
        "ref_id": 41959,
        "parent_ref_id": 35,
        "fk_workflow_id": 2,
        "stage": 1,
        "status_max": 4,
        "updated": "2012-05-14 17:30:46"
}, {
        "ref_id": 41960,
        "parent_ref_id": 35,
        "fk_workflow_id": 3,
        "stage": 3,
        "status_max": 4,
        "updated": "2012-05-14 12:30:48"
}]

ページが読み込まれると、すべてのワークフローが「新しいモデル」として作成されます。これは、ワークフローがまだ開始されているかどうかがわからないためです。フェッチが開始されたモデルを返したら、適切なモデルをビューに渡す必要があります。モデルを適切に渡す方法を理解するのに問題があります(つまり、属性を渡すことはできますが、その後、collection.create関数などにアクセスできないようです)

    var self = this;
    this.workflows = new Workflow.WorkflowCollection();
    this.workflows.fetch({
        data:{
            ref_id: REF_ID
        },
        success: function(model, response) {
            for(var i = 0, ln = model.models.length; i< ln;i++) {
            self.switchWorkflow(model.models[i].get("fk_workflow_id"), new Workflow(model.models[i].attributes));
                }
            }
        });

これは、バックボーンがセットアップする必要のあるモデルの数を知ることができる唯一の方法です(各顧客の各ワークフローを開始することを除いて-最大100万行)

setupWorkflowSpaces: function(model) {

    for(var i =0; i<Workflow.FileWorkflows.length;i++) {
        this.switchWorkflow(Workflow.FileWorkflows[i], false);
    }
},
switchWorkflow: function(workflow_id, model) {
    if(!model)
        model = new Workflow;
    switch(workflow_id) {
        case 1:
            this.applicationProcessView(model);
            break;
        case 2:
            this.kitView(model);
            break;
        case 3:
            this.posView(model);
            break;
        default:
            alert('wut');
            break;
    }
},

kitView: function(model) {
    console.log(model);
    model.set("fk_workflow_id", 2);
    if(this.kit) this.kit.close();
    this.kit = new Workflow.PostageView({
        model: model
    });
},
4

1 に答える 1

0

modelバックボーンコレクションでプロパティを定義してみてください。

var Workflow.WorkflowCollection = Backbone.Collection.extend({
  model: Workflow
});

定義されている場合、サーバーから返される生の属性はWorkflowモデルに変換されます。

successその後、のコールバックを介して返されるコレクションを反復処理する必要はありませんfetch。追加されたすべてのモデルがコレクションに含まれ、この.create()メソッドを使用してさらに追加を続けることができます。

フェッチ後、を使用して更新されたコレクションを反復処理できますWorflowCollection.each。ループでは、switchステートメントを実行して、各モデルを適切なビューに割り当てることができます。

これがお役に立てば幸いです。

于 2012-05-17T02:01:30.523 に答える