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- LastName- Age- Name
你有什么想法,我该怎么做?(使用knockoutjquery

4

3 回答 3

2

您可以使用一个简单的 JS 数组作为查找表:

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

然后fields['Name']在代码中使用而不是数值。不需要函数。

于 2012-10-10T15:25:37.740 回答
2

Diodeus 说的是一个很好的方法。您可以使用这些函数生成订单数组:

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 回答