2011-12-24 4 views
3

backbone.jsビューが初期化されるたびに関数が実行されるようにするにはどうすればよいですか?バックボーンビューを初期化するとき

backbone.jsの拡張機能として、通常のビューコードの外に置くことができるものを探しています。

アイデアは定型文の量を減らすことです。

ありがとうございました。

答えて

3

JavaScriptは真のオブジェクト指向プログラミング言語ではないので、JavaやC#のように継承を使って問題を解決することはできません。

解決策の1つは、工場設計パターンを使用することです。

ビューを直接インスタンス化する代わりに、ビューをインスタンス化するファクトリメソッドを呼び出すことができます。

var viewFactory = function(view, viewOptions) { 
    //perform your boilerplate code 
    return new view(viewOptions); 
} 

AView = Backbone.View.extend({}); 

var person = new Backbone.Model({name: 'Paul'}); 
var view = viewFactory(AView, { model: person }); 

は、ここでそれは他の言語で可能であるエレガントな解決策としてはありませんjsfiddle example

だが、それは仕事をしていません。

http://documentcloud.github.com/backbone/#View-constructor

var ItemView = Backbone.View.extend({ 
    initialize: function(){ 
    alert('View Initialized'); 
    } 
}); 

EDIT:私はより明確にする必要があり

+0

うん、これは私が今やっていることです。それは許容可能な/良い解決策です。 – Harry

1

Backbone.Eventsを使用できます。

app.eventManager = {}; 
_.extend(app.eventManager, Backbone.Events); 
app.eventManager.bind("newView", app.yourfunction(view)); 

そして、あなたはあなたの機能を起動したい任意のビューのinitializeメソッドで:

app.eventManager.trigger("newView", this); 

「この」あなたのアプリのトップレベルまたはグローバルオブジェクトの

関数に "view"パラメータとして渡されたビューインスタンスです。

+1

イベントが組み込まれていないため、手動でトリガすることは理想的ではありません。 – Harry

+0

なぜカスタムイベントをトリガするのが理想的ではないのですか? – ProTom

3

は組み込みBACKBONE.JS機能を初期化します。パトリック・ユーイングの言葉で

がここにhttp://podcast.rubyonrails.org/programs/1/episodes/railsconf-2007が見つかりました:パンチダック

"if it walks like a duck and talks like a duck, it’s a duck, right? So if this duck is not giving you the noise that you want, you’ve got to just punch that duck until it returns what you expect"

(またはモンキーパッチをご希望の場合)バックボーンオブジェクトを。

Backbone.View.prototype.initialize = function(){ 
    alert('I overrode the default initialize function!'); 
} 
+1

問題は、新しいビューを作成するときに上書きを上書きすることです。 – Harry

+0

ビューで初期化関数を定義した場合のみです。 –

+4

オーバーライドでスーパーメソッドを呼び出すことができます。 ClassYouExtend.prototype.initialize.call(this);あなたの両親が呼び出されます。 – ProTom

関連する問題