2

FatFractal JavaScript(HTML5)SDKを使用してgrabBagAdd()メソッドを呼び出すと、エラーが発生します。この特定の問題の場合、私のデータモデルは単純で、カスタムTeamオブジェクトとデフォルトのFFUserオブジェクトの2つのオブジェクトタイプのみが含まれます。

関連するFFDL宣言:

CREATE OBJECTTYPE FFUser (userName STRING, firstName STRING, lastName STRING, email STRING, active BOOLEAN, authDomain STRING, groups GRABBAG /FFUserGroup, notif_ids GRABBAG /FFNotificationID)
CREATE OBJECTTYPE Team (teamName STRING, members GRABBAG /FFUser)

CREATE COLLECTION /FFUser OBJECTTYPE FFUser
CREATE COLLECTION /Teams OBJECTTYPE Team

JSオブジェクト宣言:

function Team(data){
    if(data){
        this.clazz = data.clazz;
        this.guid = data.guid;
        this.teamName = data.teamName;
    }
    else{
        this.clazz = "Team";
        this.guid = null;
        this.teamName = null;
    }
    return this;
}

function FFUser(data){
    if(data){
        this.clazz = data.clazz;
        this.userName = data.userName;
        this.firstName = data.firstName;
        this.lastName = data.lastName;
        this.email = data.email;
        this.active = data.active;
        this.guid = data.guid;
    }
    else{
        this.clazz = "FFUser";
        this.userName = null;
        this.firstName = null;
        this.lastName = null;
        this.email = null;
        this.active = null;
        this.guid = null;
    }
    return this;
}

選択したチームのメンバーのグラブバッグにFFUserを追加しようとしています。KnockoutJSバインディングを使用してWebアプリのデータを表示し、KnockoutJSオブザーバブルを使用してデータをローカルに保存しています。エラーを生成するユースケースの適切な手順は次のとおりです。

ユーザーがログインした後、アプリのバックエンドからTeamsをプルします。以下self.teamsは、HTML選択メニューにバインドされた監視可能な配列です。

    function loadTeams() {
        ff.getArrayFromUri("/ff/resources/Teams",function(loadedTeams) {
            if(loadedTeams.length > 0) {
                for(var i = 0; i < teams.length; i++) {
                    var team = new Team(loadedTeams[i]);
                    self.teams.push(team);
                }
            }
            else console.log("No teams to load!");
        },function(statusCode,responseText) {
            alert(JSON.parse(responseText).statusMessage);
        });
    };

ユーザーは選択メニューからチームを選択し、チームメンバーとして追加するユーザー名を入力します。送信すると、grabBagAdd()が実行されます。以下self.selectedTeamは、選択メニューの値へのオブザーバブルバインドであり、からのチームオブジェクトの1つが含まれていますself.teams。また、self.addMemberEmailユーザー名入力ボックスの値への監視可能なバインドです。

    self.addMember = function() {
        if(self.addMemberEmail()) {
            ff.getObjFromUri("/ff/resources/FFUser/(userName eq '" + self.addMemberEmail() + "')",function(user) {
                if(user){
                    var member = new FFUser(user);
                    ff.grabBagAdd(member,self.selectedTeam(),"members",function() {
                        console.log("Added member to grabbag!");
                    },function(statusCode,responseText) {
                        alert(JSON.parse(responseText).statusMessage);
                    });         
                }
                else alert("No users found with the provided username.");
            },function(statusCode,responseText) {
                alert(JSON.parse(responseText).statusMessage);
            });
        }
        else alert("Must provide member email.");
    };

FatFractalは400: Bad Request次のようなエラーを返します。

FatFractal.handleGrabBagRequest 400, {"result":null,"statusMessage":"Cannot add NULL items to a object's grab bag"}

エラーをどうすればよいかわからない。どんな助けでもいただければ幸いです!

4

1 に答える 1

2

grabBagAdd関数は、最初の2つの引数として、オブジェクト自体ではなくsを取りますffUrl。したがって、次のことを試してください。

ff.grabBagAdd(member.ffUrl, self.selectedTeam().ffUrl, "members", ...

あなたの質問から、メタデータを含むオブジェクトを返すかどうかは完全には明らかではありませself.selectedTeam()んが、とにかくあなたはアイデアを得ることができます。

于 2013-02-19T17:59:03.990 に答える