0

Env: チタン 3.1.3、合金 1.2.2。

モデル/コレクションの永続化のために次のアダプターを使用しています: https://github.com/viezel/napp.alloy.adapter.restapi

コレクションの URL 構造が単一のモデルとは異なる API があります。次の点を考慮してください。

単一のレコードを取得するには:[GET] /files/:id

ユーザーのすべてのファイルを取得するには:[GET] /users/:id/files

の次のスキーマがありますfiles.js

exports.definition = {  
    config: {
        "URL": "https://my.api.here/files",
        //"debug": 1, 
        "adapter": {
            "type": "restapi",
            "collection_name": "files",
            "idAttribute": "id"
        }
    },      
    extendModel: function(Model) {      
        _.extend(Model.prototype, {});
       return Model;
    },  
    extendCollection: function(Collection) {        
        _.extend(Collection.prototype, {
            initialize: function(){
                this.url = "http://my.api.here/users/"+this.user_id+"/files";
            }
        });
        return Collection;
    }       
}

上記で私がやろうとしているのは、コレクションの初期化メソッドをオーバーライドして、コレクションの URL 構造を変更することです。次に、これを適宜呼び出します。

var currentUserFiles = Alloy.createCollection("files", {user_id:"12345"});
    currentUserFiles.fetch({
        success: function(files){
            console.log("Woo! Got the user's files!");
            console.log(JSON.stringify(files.models));
        },
        error: function(){
            console.log("Nope");
        }
    });

これはうまくいきません。メソッドはfetch()引き続き を呼び出します/files。コレクションの作成後にコレクションのプロパティとして url を設定しようとしましたが、これも機能しません。理想的には、ローカル インスタンスとコレクションのシングルトン バージョンの両方に対してこれを行いたいと考えています。

問題は、モデルとは異なる URL をコレクションに使用できるかどうかです。明らかに、クライアント側で呼び出して並べ替え/フィルタリングしたくありません/files。これは、多くのレコードがある悪夢になります。ここで何が欠けていますか?

4

1 に答える 1

0

少し遅いですが、これに出くわした他の人にとっては。私の問題は、モデルとコレクションの URL がどこでどのように指定されているかです。モデルは 1 つのオブジェクトしか持てないため、モデルには特定の ID (例: 主キー) を渡す必要があります。複数のオブジェクトが必要な場合は、コレクションを使用してください。お役に立てれば :)

extendModel : function(Model) {
    _.extend(Model.prototype, {
        url : function() {
            return "http://my.api.here/users/"+this.user_id+"/files/"+ FILE_ID
        },
    });
    return Model;
},
extendCollection : function(Collection) {
    _.extend(Collection.prototype, {
        url : function() {
            return "http://my.api.here/users/"+this.user_id+"/files"
        },
    });
},
于 2013-12-30T05:08:42.333 に答える