0

admin、user の 2 種類のユーザーを持つ mywebsite を作成しました。だから、私は3ページのmainpag.html、admin.html、user.htmlを作成しました。そして、それぞれのモデル、ビュー、コレクション、routers.js ファイルを分けます。そのため、ログイン後、モデルの異なる別のhtmlページに送信しているため、ユーザーモデルを自動的に取得できません。だから私はこれが好きでした:

まず、サーバーへの ajax 呼び出しを行い、_id を要求しました (セッションのユーザー名なので、id を取得できます)

ID から、model.fetch() によってモデルを取得し、すべての属性を持つユーザーモデルを取得しました。

次に、 fetch の成功コールバックで、 model.save({weight : "somevalue"}) を実行しました。私によると、モデルはすでに利用可能であるため、属性の重みも古い値で利用可能であるため、正しく更新する必要がありますが、model.isNew() を試したときに POST リクエストを送信しています。どこが間違っていますか?モデルを更新するにはどうすればよいですか? 必要に応じて詳細を投稿します。

詳細:

その保存メソッドを削除すると、モデルで正しい属性が取得されます。

その保存メソッドを削除しないと、成功とエラーのコールバックもモデルの属性として表示されます。

コード :

   addWeight : (e)->
    arr=new Array()
    arr['_id']=app._id
    console.log "asdasd"
    console.log arr
    console.log arr['_id']
    @user_model =new UserModel(arr)
    @user_model.fetch({
      success : (model,res,options) =>
        console.log model
        console.log res
        arr=new Array()
        arr['_id']=e.target.id
        #arr['action']='weight' #means , update weight
        #@user_model.setArr(arr)  
        #@user_model.set({weight : arr['_id']}) 
        console.log "new  : "+@user_model.isNew()
        @user_model.save({weight : e.target.id})
        #@user_model.save({
        #  success : (model,res,options) =>
        #    console.log "model updated: "+JSON.stringify(model)
        #    console.log "Res : "+JSON.stringify(res)
        #  error : (model,res,options) =>
        #    console.log "Error : "+JSON.stringify(res)
        #})

      error : (model,res,options) =>
        console.log "Error "  

    })

上記のコードはcoffeescriptで書かれているので、coffeescriptを知らなくても安心して簡単に理解できますし、#の意味はコメントです。ここでは中かっこの代わりにインデントに従います。

もう 1 つ疑問があります。モデルの URL は要件に応じて動的に変更する必要があります。それを達成するための最良の方法は何ですか? 私はこのようにやっています:

url に存在する必要がある必須フィールドを含む「配列」を入力しています。モデルの init func では、@arr=arr,thenin url の関数を使用しています。このようにチェックします。

   url : -> 
     if @arr['id'] 
     "/user/#{@id}"

私のアプローチは正しいですか、またはURLを動的に設定するためのより良いアプローチがあります。または、次のようにURLを直接設定できますか:

    @user_model.setUrl "/someurl/someid"  //this setUrl method is available in model's definition
    @user_model.fetch() or save() or watever that needs url

ありがとう

4

2 に答える 2

3

ただの予感ですが、フィールドmodel.fetch()を取得するために電話をかけるとおっしゃいました。代わりに、必ずフィールドを_id返すようにしてください(アンダースコアに注意してください)。id_id

model.isNew()returnの呼び出しtrueは、idプロパティがmodel.fetch()呼び出しから設定されなかったことを示します。

私はあなたのコードで可能なさらなる説明を楽しみにしています...あなたのコードを見てください:

/* The model needs an 'id' attribute in order to marked as not new */ 
@user_model = new UserModel(id: arr['_id']) 
于 2012-04-18T06:19:54.803 に答える
2

実際に電話したら

model.set({weight: "somevalue"});

モデルの値を更新しますが、POST リクエストは送信しません

model.save(attribute);

おそらくご存知のように、実際には Backbone.sync を呼び出します。

編集 :

ot set が必要な場合があります

m = Backbone.Model.extend({
    idAttribute: '_id'
});

isNew メソッドは、モデルに id 属性があるかどうかを実際にチェックするため、すべてのモデルに

これに関して、ここで .set が backbone.sync を呼び出さないことがわかります: http://jsfiddle.net/5M9HH/1/

于 2012-04-18T06:07:40.580 に答える