1

knockout.jslib を使用してデータをバインドしています。
次の例を見てみましょう
JSFiddle の例

私はデータを持つテーブルを持っています。テーブルには列の順序があります -

Name- LastName- Middlename-Age
そして私は4つの機能を持っています

var namePosition = function()

var lastnamePosition = function()

var middlenamePosition = function()

var agePosition = function()  

テーブル内の列の順序を、この関数によって返される値にバインドしたい。
たとえば、
namePositionリターン4
lastnamePositionリターン2
middlenamePositionリターン1
agePositionリターンの3
場合、テーブルは次の列順序を持つ必要があり
Middlenameます--- 。 どうすればいいですか?(またはを使用)LastNameAgeName
knockoutjquery

4

3 に答える 3

2

シンプルな JS 配列をルックアップ テーブルとして使用できます。

var fields = [];
fields['Name'] = 4; 
fields['LastName'] = 2;
...etc...

次にfields['Name']、コード内の数値の代わりに使用します。関数は必要ありません。

于 2012-10-10T15:25:37.740 に答える
2

ディオデウスが言ったことは良い方法です。これらの関数を使用して順序配列を生成できます。

var order = [];
order[namePosition()] = "name";
order[lastnamePosition()] = "last";
order[middlenamePosition()] = "middle";
order[agePosition()] = "age";

// order===["middle", "last", "age", "name"]

次に、前述の作成時の順序を初期値として使用して、 order observableArray プロパティをオブジェクトに設定します。

最後に、セルの順序とテキストを新しい値にバインドします。

<table>
   <thead>  
     <tr data-bind="foreach:order">
       <td data-bind="text:$root.headers[$data]"></td>
    </tr>
 </thead>
  <tbody data-bind="foreach:users">   
    <tr data-bind="foreach:$root.order">
        <td><span data-bind="text:$parent[$data]"></span></td>
    </tr>
  </tbody>
</table>

$root と $parent に関する情報

現在のアプローチでは、次のようなコードで列の順序を動的に変更できます。

model.order(["name", "last", "age", "middle"])

例: http://jsfiddle.net/Klaster_1/Pw2VE/1/

于 2012-10-10T16:34:58.410 に答える
1

テーブルには見出しがあり、これらの見出しも並べ替える必要があるという観点からアプローチしました。そうでない場合は、おそらくこの回答を完全に無視できます。:)

私は Knockout に少しも慣れていません。これがコード ホラーではないという確信は持てません。

ただし、このフィドルは、列の順序を例で指定した順序に変更します。ただし、値はハードコードされています (適切な方法である必要があります)。値を任意の位置に移動する方法を考え出すのはそれほど面倒ではありません(?)。

ここ: http://jsfiddle.net/enhzflep/KKhZg/368/

于 2012-10-10T15:58:05.987 に答える