###前提・実現したいこと
今、下記のようなグローバル変数が定義されているとします。
このグローバル変数はプログラム中のいたるところで使用されます。
(例えばボタンがクリックされたらクリックされたボタンに応じてグローバル変数の値を書き換えたり、これらの値を使って計算したり、色々です。)
実現したいこととしましては、これらのグローバル変数を使わないような設計にしたいということです。
最近Backbone.jsを勉強し始め導入を試みているのですが、グローバル変数があらゆるViewのメソッド内で乱用されています。
これでは、疎結合化を図るBackbone.jsの理念(?)からは大きく外れてしまうのではないかと懸念しています。
例の場合だと、ファイルを分割したときにglobal_1が様々なファイルをまたいでいるので、保守性のことなどを考えるとこれではいけませんよね…
Backbone.jsに限った話ではないですが、様々な処理で変数を共有させたい場合、どのような設計方法がベストなのでしょうか?
あまり具体例がなくぼんやりした質問ですが何かご回答を頂けると助かります。
###例
javascript
1global_1; 2global_2; 3global_3;
###追記
より具体的な例で説明します。
###HTML
html
1 <div class="demo"> 2 <ul> 3 <li id="list1">list1</li> 4 <li id="list2">list2</li> 5 <li id="list3">list3</li> 6 </ul> 7 <button type="button" id="button">Button</button> 8 </div>
###jQueryでの記述
javascript
1$(function(){ 2 var listText; 3 4 $('.demo li').click(function(){ 5 listText = $(this).text(); 6 }); 7 8 $('#button').click(function(){ 9 console.log(listText); 10 }); 11});
これを私なりにBackbone.jsを使って書き換えると、以下のようなコードになりました。
###テンプレート
html
1<script type="text/template" id="text-template"> 2 <%- text %> 3</script>
###Backbone.jsでの記述
javascript
1var listText; 2 3//liのModel 4var LiModel = Backbone.Model.extend({ 5 defaults: { 6 text: 'list1' 7 } 8}); 9 10//liのView 11var LiView = Backbone.View.extend({ 12 tagName: 'li', 13 template: _.template($('#text-template').html()), 14 events: { 15 'click': 'getText' 16 }, 17 getText: function(){ 18 listText = this.model.get('text'); 19 }, 20 render: function(){ 21 var template = this.template(this.model.toJSON()); 22 this.$el.html(template); 23 return this; 24 } 25}); 26 27//ボタンのView 28var ButtonView = Backbone.View.extend({ 29 el: '#button', 30 events: { 31 'click': 'showText' 32 }, 33 showText: function(){ 34 console.log(listText); 35 } 36}); 37 38var liModel = new LiModel(); 39var liView = new LiView({model: liModel}); 40$('.demo').append(view.render().el); 41var buttonView = new ButtonView(); 42
このような処理をBackbone.js的に実装しようとしても、「listText」というグローバル変数を記述するような方法でコーディングしてしまいます。
この程度ならlistTextが存在しても何の問題もないのですが、実装したい機能としてはもっと複雑で、listTextが様々な処理に絡み、listTextのような変数もかなり増えてくることが予想されます。
Backbone.jsに関係なく、クラス間でうまいこと変数を受け渡しできればいいのかなーと思うのですが、良い実装方法が思い浮かびません…
###追記2
liのViewがおかしかったので少し修正しました
回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。