9

これは私の最初のBackBone.jsでの作業です。私はコンソールでエラーが発生しているので、実際にルータの部分で立ち往生しています。 "エラー:urlプロパティまたは関数を指定する必要があります"。これは私のシナリオです。私は動的にREST URLを形成し、それに応じてサーバーからデータをフェッチするクリック機能を持っています。ここでエラー:urlプロパティまたは関数を指定する必要があります

がクリック機能コードが

function onUserClick(obj){ 
    var userID=$(obj).attr('id'); 
    window.location.href="#"+userID+"/"; 
    var userRouter = new UserRouter; 
} 

であると私はルータに

var userModel; 
var UserRouter = Backbone.Router.extend({ 
    routes:{ 
     ":userid/":"getUsers" 
    }, 
    getUsers:function(userid){ 
     var url="http://myserver.com/users/"+userid; 
     userModel = new UserModel({urlRoot:url}); 
     var userView = new UserView({el:$(#"container")}); 
    } 
}); 
var UserModel = Backbobe.Model.extend({}); 
var UserView = Backbone.View.extend({ 
    model:userModel, 
    initialize:function(){ 
     _.templateSettings = { 
      interpolate: /\{\{\=(.+?)\}\}/g, 
      evaluate: /\{\{(.+?)\}\}/g 
     }; 
     this.model.fetch(); 
     this.model.bind("change",this.render,this); 
    }, 
    render:function(){ 
     var data=this.model.toJSON(); 
     var userTemplate=_.template($("#userTemplate").text()); 
     var htmlData=userTemplate({ 
      "userData":data 
     }); 
     $(this.el).html(htmlData); 
    } 
}); 

を次のコードを持っている誰かが、私はここでの問題を把握するのに役立つことはできますか?私はここで何か間違ったことをしており、これに関する専門家のアドバイスを求めています。このシナリオのためのウォーキングサンプルは非常に高く評価されています。

+0

エラーに文脈を与えることはできますか?あなたはまだこれを解決するために何をしようとしましたか? – tkone

答えて

21

あなたはあなたのモデルにfetchを呼んでいる:

var UserView = Backbone.View.extend({ 
    model: userModel, 
    initialize: function() { 
     // ... 
     this.model.fetch(); 

をしかし、あなたはあなたのモデルurl財産を与えていない:サーバーにfetch方法会談

var UserModel = Backbone.Model.extend({}); 

と、それは使用していますurlそうすること:

urlmodel.url()

Returns the relative URL where the model's resource would be located on the server. If your models are located somewhere else, override this method with the correct logic. Generates URLs of the form: "/[collection.url]/[id]" , falling back to "/[urlRoot]/id" if the model is not part of a collection.

default implementation for a Model's urlは次のようになります。

url: function() { 
    var base = _.result(this, 'urlRoot') || _.result(this.collection, 'url') || urlError(); 
    if (this.isNew()) return base; 
    return base + (base.charAt(base.length - 1) === '/' ? '' : '/') + encodeURIComponent(this.id); 
}, 

あなたはurlRootを持っていない、あなたがURLの生成を委任するコレクションを持っていない、とあなたはそうurlError()が呼び出されるとどこそれはだurlをオーバーライドしていませんあなたのエラーメッセージが表示されます。

UserModelには、サーバーのfetchインスタンスができるように、RESTfulなurlプロパティまたは関数が必要です。あるいは、クライアント側の環境ですでに利用可能なデータからモデルを作成することもできます(もちろん、Backboneから何かを保存する予定がない限り)。

+0

あなたの答えをありがとう、それは役に立ちました。 –

関連する問題