jCTの葛藤、フロントテンプレートの下のデザインモードVSコンポーネント、汎用コンポーネントgone



ずっとjCTでWEBビジュアルを書こうと思っていたので、Gridから作ろうと思っていましたが、実際に私がやっていたときにこんな葛藤に気づきました
jCTはもともとテンプレート技術であり,コンポーネントは特定のテンプレート技術と考えられる(ただしjavascriptコードにテンプレートが書かれているだけである)
テンプレートに現れるhtmlの元のコード形式、改造拡張、構造調整、属性の増加は従来のコンポーネントに比べて非常に便利であるため、コンポーネントを作りたいという考えもおかしくない.
しかし、この柔軟性こそjCTという方向を破壊した.汎用コンポーネントのテンプレートコードは柔軟性を完全に体現できず、複雑になりやすいからだ.
ただでさえ直接htmlテンプレートを书くのは简単ですから、判断したり、ループをつけたり、ページを分けたりするのは简単です.
コードトーク:コメント用
table部
<!---///grid recorders-->
<!--grid        ,recorders         -->
	<table>
	<thead>
<!--    ,                   th    ,           class   -->
	<tr>
		<th>   </th>
		<th>  </th>
		<th>  </th>
	</tr>
	</thead>
	<tbody>
	<!---this.Fn.V.push(this.rows.GetView(recorders));-->
<!--           ,     jCT       push        ,
        grid  rows   ,       ,    this.rows.GetView(recorders) push     
   tbody  ,           ,  recorders          
-->
	<!---///rows recorders-->
	<!---for(var i=0;i<recorders.length;i++){var l=recorders[i];-->
<!--        ,               ,       ?         -->
	<tr name="/" value="user.get" class="submitdblc">
		<td name="id" value="+-l.id-+"><span name="user">+-l.user-+</span></td>
<!--  id      ,             ,    name="/"    -->
		<td name="xingming">+-l.xingming-+</td>
		<td name="zhiwei">+-l.zhiwei-+</td>
	</tr>
	<!---}-->
	<!---///rows-->
	</tbody>
	</table>
	<div>
	<!---this.Fn.V.push(page.GetView(toPages(recorders)));-->
<!--       ,toPages        ,      -->
	</div>
<!---///grid-->

<!--           ,                  -->
<!---///page p-->
<div class="page">
	<fieldset>
	<!---for(var i=p.start;i<=p.end;i++){-->
	<button class="pageButton" value="+-i-+">+-i-+</button>
	<!---}-->
	<button class="pageButton" value="+-p.prev-+"> 9 </button>
	<button class="pageButton" value="+-p.next-+"> 9 </button>
	<button class="pageButton" value="+-p.count-+"> +-p.count-+ +-p.rows-+ </button>
	</fieldset>
</div>
<!---///page-->


ページ分けの関数は、上のコードにバックグラウンドで返されるrecordersオブジェクトに直接関連パラメータが含まれていることを要求します.もちろん、これらのパラメータを独立させることができます.
/*
 *sets         ,            
 *    page_count   ,              js   ,                ,
 *                             ,            ,            
 *    page_no      
 *    rows_count    
 *range              ,     9,                     
 *            ,                      
 *page   ,               
 *    start:       
 *    end:       
 *    prev:  range 
 *    next:  range 
 *    no:    
 *    rows:rows_count    
 */
function toPages (sets,range){
	range=range||9;
	var rng=Math.floor(range/2);
	var page={start:0,end:0,prev:0,next:0};
	page.count= sets.page_count|| 0;
	page.no = sets.page_no || 0;
	page.rows=sets.rows_count||0;
	if(!page.no) return page;
	page.start=page.no-rng;
	if(page.start<1) page.start=1;
	page.end=page.no+rng;
	if(page.end>page.count) page.end=page.count;
	page.prev=page.start-rng;
	if(page.prev<1) page.prev=1;
	page.next=page.end+rng;
	if(page.next>page.count) page.next=page.count;
	return page;
}

 
では、この中にどれだけの成分がアセンブリ化できますか?これらの面があると思いますが、問題と疑問は同時に存在します.
  • ヘッダとrecordersループ部分はやはり構成が便利ですね.簡単なニーズに対しては確かにそうすることができますが、複雑なニーズはありますか.はい、あまりにも普遍的で、私达はいつも明らかにデータがint型にあげることに出会って、vchar型を使うことを表示して、この职位はidである可能性が高いことを表示して、确かにvcharを使うことを表示して、ほほほ、あなたは言います:バックグラウンドの与えるデータの时に合同クエリーでOKで、间违いなくて、このようにすることができて、もっと多くの合同クエリーが现れた后に、効率は高くありません実はこのような状況は多くの場合、データ辞書を作成してフロントでjsで置き換えることができますが、私たちはデータに対してフロントの前期の前処理を行いますか、それとも直接テンプレートに書きますか.私は直接テンプレートに書くことを推奨します.なぜですか.これはただの特殊な需要なので、対応する類似の特殊な需要がたくさんあるかもしれません.データ辞書を置き換えた後、元のint値を保存する必要があるかもしれません.例えば、ポジションテンプレートの部分は
    <td name="zhiwei" value="+-l.zhiwei-+">+-dict.zhiwei[l.zhiwei]-+</td>
    と書くことができます.tdにvalueがあるように見える属性は変ですが、構造全体と値を取るのは簡単です.このvalueを取る方法については話しません.これは面倒ではありませんが、jQueryのvalメソッドを直接使うと、間違いなくだめです.このような設計に基づくvalの値は優先度があります.つまりvalue属性が優先され、なければinnerHTMLを取ります.
  • 並べ替え、ヘッダーヘッダーをダブルクリックして並べ替えることができます.確かにこれは本当のニーズです.後続の文章では、
  • 案を示します.
  • 編集修正実はタイムリーなダブルクリックポップアップダイアログの修正でもcell直接修正でも、jQueryのようなフレームワークを使うとclassを付けて
    $('table.dbleditbox tr').live('dblclick',yourfunc);
    
    を書けばOKです.そうすれば、上にポジションを残す元のint値が意味を際立たせるので、これもコンポーネント化できるのではないでしょうか.ほほほ注意しました:上で使うのはliveで、全体のフロントが1つ設置して発効することができて実は例外があって、それはいくつかdialogコンポーネントがeventの泡を止めることができて、しかし私はこれがdialogコンポーネント自身の問題だと思って、
  • ページの要求はバックグラウンドに伝達し、データの提出を修正する必要があります.確かに、私の上のテンプレートコードを見るだけで、一部の読者は霧の水になります.これはどのように要求を提出しますか.これはモードの問題だと言っています.もし私たちがコンポーネントを作って提出とパラメータ伝達方法を設計すれば、学習コストは高くありません.コードの繰り返しは高くありません.
    <tr name="/" value="user.get" class="submitdblc">
    この書き方を見たでしょう.特殊なname="/"で彼のvalueはバックグラウンドに提出された要求方法です.パラメータの変更は統一的な開発モードで設計定義することができ、一つの方法はこのような需要を満たすことができますが、これはすでにコンポーネントの設計問題ではありません.これは開発モードの問題です.修正提出も同じです.
  • です.
     
    この問題はついに肝心な点を見つけて、コンポーネントVS設計モード、私達の既知のコンポーネントは確かに自分の設計モードを縛って、開発者に対して確かに多くの制限があって、フロントテンプレートは確かに開発者に自由を与えて、しかし同時に開発者が自分の1本の道を模索して、やっと通行することができます.jCTの葛藤:複雑な応用に対して、開発者は自分の設計モードがあってこそ「飛躍的に向上する」ことができる.複雑な応用用コンポーネントの需要がもっと大きいため、コンポーネントを細かく研究するか、設計モードから着手するか、自分のコードを書くか、難しい選択である.
     
    確定できるのはフロントテンプレート+設計モードのコード量で、柔軟性はすべて純粋なコンポーネントよりはるかに優れて、フロントテンプレートの下で応用需要によって設計テンプレートを分類して、制定した“コンポーネント”を形成して、自分で直ちに書くコンポーネントで、jCTがコンパイル型テンプレートであることを忘れないでください、最後の実行コードは独立して独立したjsに保存できる(このようなエクスポート方法を書くべきだと思います)、ページングバーは独立してコンポーネントになるようで、このような小さなコンポーネントは、直接テンプレートをコピーして貼るほうが便利だと思います.