2012-03-06 8 views
0

私は複数の同様の複雑なプロパティを持つオブジェクトを持っています。私は、各プロパティに使用できる一般的なテンプレートを書きたいと思いますが、進める方法がわかりません。私のオブジェクトは、以下のjson表現に似ています。アポイントメント/日がコレクションの場合、コレクションを通常どおりにバインドするコレクションを繰り返すことができます。しかし、私はそれぞれの「日」をプロパティとしてモデル化する必要があります。たとえば、常に5つのエントリがあります。複数の同様のオブジェクトプロパティのBackbone.js汎用テンプレート。

しかし、私はあなたが毎日同じテンプレートを再利用することができると思います。実際には、反射を使用して各プロパティを反復処理しますか?

{ 
    "days" : { 
    "monday" : { 
     "salesman" : "john", 
     "customer" : "fred" 
    }, 
    "friday" : { 
     "salesman" : "paul", 
     "customer" : "keith" 
    }, 
    "tuesday" : { 
     "salesman" : "dave", 
     "customer" : "graham" 
    }, 
    "wednesday" : { 
     "salesman" : "james", 
     "customer" : "keith" 
    }, 
    "thursday" : { 
     "salesman" : "keith", 
     "customer" : "donald" 
    } 
    } 
} 

答えて

0

あなたはわずか数日にわたり反復子を使用して、知られているキーを使用して補間することができますので、それは非常に簡単になるだろう。このような何かにフォーマットを変更することができます。

{ days: [{"weekday":"monday", "salesman":"john", "customer":"fred"}, ...]} 

しかし、(おそらく同様にMustache.jsで動作するはずですが、私はそれを試していません)あなたはこのようなHandlebars.jsでこれを解決することができ、既存のフォーマットを使用して:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
     "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <title></title> 
    <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script> 
    <script type="text/javascript" 
      src="http://cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0.beta2/handlebars.min.js"></script> 
</head> 
<body> 
<div id="output"> 
</div> 
<script id="tmpl" type="x-template"> 
    <table> 
    {{#key_value days}} 
     <tr> 
      <td><strong>{{key}}</strong></td> 
      <td>{{value.salesman}}</td> 
      <td>{{value.customer}}</td> 
     </tr> 
    {{/key_value}} 
    </table> 
</script> 
<script type="text/javascript"> 
    var data = { 
     "days":{ 
      "monday":{ 
       "salesman":"john", 
       "customer":"fred" 
      }, 
      "friday":{ 
       "salesman":"paul", 
       "customer":"keith" 
      }, 
      "tuesday":{ 
       "salesman":"dave", 
       "customer":"graham" 
      }, 
      "wednesday":{ 
       "salesman":"james", 
       "customer":"keith" 
      }, 
      "thursday":{ 
       "salesman":"keith", 
       "customer":"donald" 
      } 
     } 
    }; 

    Handlebars.registerHelper("key_value", function (obj, fn) { 
     var soFar = ""; 
     var key; 
     for (key in obj) { 
      if (obj.hasOwnProperty(key)) { 
       soFar += fn({key:key, value:obj[key]}); 
      } 
     } 
     return soFar; 
    }); 

    var templateSrc = $("#tmpl").html(); 
    var template = Handlebars.compile(templateSrc); 
    var result = template(data); 

    $("#output").html(result); 
</script> 
</body> 
</html> 
0

はい、出来るよ。あなたは、日々のモデルを収集することができます。各日のモデルの属性は、アポイントメントのアポイントメントモデルの集合とすることができる。日のコレクションを繰り返していくと、その日の予定コレクションが利用可能になります。毎日、予定を繰り返す。

この場合、1日モデルのテンプレートと予定モデルのテンプレートがあります。各コレクションを反復する際には、新しいBackbone.Viewを作成し、現在のモデルを渡します。

+0

合意して、私はコレクションベースのモデルに再度移動します。ありがとうございました。 –

関連する問題