次のようなバックボーン モデルの関数 URL を指定しようとしています。
var Directory = Backbone.Model.extend({
defaults: {
path: '/',
entries: new DirectoryEntries
},
initialize: function() {
this.listenTo(this, 'change:path', this.fetch);
this.fetch();
},
parse: function(response, options) {
if (response != null) {
for (var i = 0; i < response.length; ++i) {
this.get('entries').add(new DirectoryEntry(response[i]));
}
}
this.trigger('change');
},
url: function() {
return '/svn-ls.php?path=' + this.get('path');
},
初期化関数での fetch() の最初の呼び出しは正常に機能しているように見えますが、パスの変更で fetch が呼び出されると、バックボーンは次の JSON 要求を作成しようとします。http://localhost:8000/function%20()%20%7B%20%20%20%20%20%20return%20'/svn-ls.php?path='%20+%20this.get('path');%20%20%20%20}
つまり、実際に呼び出すのではなく、this.url を使用しようとしているようです。
ここで何が問題なのか知っている人はいますか?
編集:listenTo
呼び出しを次のように変更しました:
var self = this;
this.listenTo(this, 'change:path', function() { self.fetch(); });
そして今、すべてがうまくいくようです。ただし、 this.fetch を直接バインドすると、問題が発生する理由はわかりません。