2013-10-11 142 views
0

所以在我的移动网络应用程序(使用PhoneJS),我使用dxList来显示一些记录。我有一个复选框旁边的每个列表'项目',以便我可以批量删除或发送记录。我需要知道如何确定是否有一个或多个复选框被选中。检查是否有任何复选框被检查敲除 - PhoneJS

我知道我可以用正常的淘汰赛做到这一点,但我不是PhoneJS框架实际上创建了一个“真正的” HTML复选框,而是一个可点击的元素,像一个复选框功能。

所以如果一个或多个复选框被选中,我需要显示一个发送和删除按钮。我只需要知道如何确定是否有任何复选框。

我看了网上随处可见这一点,但解决方案使用真实复选框上输入是淘汰赛...

这里是我的dxList代码:

<div data-bind="dxList:{dataSource: list_data, grouped:true }"> 
    <div data-options="dxTemplate:{name:'group'}"> 
     <b><span data-bind="text: $data.key"></span></b> 
    </div> 
    <div data-options="dxTemplate:{name:'item'}"> 
     <span data-bind="text: $data.item_value"></span> 
     <div data-bind="dxCheckBox: { }" style="float:right"></div> 
    </div> 
</div> 

我试图结合“检查“到一个可观察数组,但会影响所有复选框。

任何人都可以帮助我吗?谢谢!

+0

你是如何测试的?最坏的情况下,我会尝试使用像萤火虫或开发工具的东西右键单击并检查复选框,看看是什么属性告诉它看起来检查,然后做一个jquery调用,说找到'checked'元素,并与他们做一些事情。 – segFault

+0

@segFault如果我需要,我会这样做,但是如果可以的话,我希望有一个来自PhoneJS的内置解决方案 – Caleb

回答

0

最简单的MVVM的做法是将数据绑定dxCheckBox.checked选项列表项视图模型的布尔属性。然后你可以遍历这些项目并理解哪些被检查。

你提到

试图绑定“检查”,以可观察到的阵列

你为什么标属性绑定到一个数组目前尚不清楚。

实际上,它与纯HTML方法没有多大差别。您可以将PhoneJS小部件视为胖HTML标签。

0

所以,我有几乎同样的问题,但我想我可以在我的要求更加明确。

我有一个dxList使用SQLite表作为数据源。它设置为允许用户从模板列表中进行选择以应用于其他对象。这个新的模板列表和关联的对象ID将被保存在与原始数据不同的表格中,因此,我需要能够识别列表中已检查过的项目。

<div data-bind="dxList: { dataSource: templateList }"> 
     <div data-bind="dxAction: ''" data-options="dxTemplate : { name: 'item' } "> 
      <table> 
       <tr>      
        <td> 
         <div data-bind="dxCheckBox: { }"></div> 
        </td> 
        <td> 
         <div style="font-weight: bold; padding-left: 10px;" data-bind="text: TemplateName"></div> 
        </td>     
       </tr> 
      </table> 
     </div> 
    </div> 

我在初次搜索时发现了这篇文章。我无法使用每个复选框的data-bind:{checked:?}值,就像发现原始海报那样,设置全部或不设置。我想过一个数组。我将尝试使用dxAction从数组中添加/删除已检查的列表项ID,但我不确定这样做会有多好。然后有最后的解析来获取所有检查的项目。一旦我开始工作,我会更新这篇文章。

分辨率:

视图模型对象:

selectedTemplates: ko.observableArray(), 
selectTemplate: function (args) { 
     //If it's there. Remove it. 
     if (args.model.selectedTemplates.indexOf(args.itemData.TemplateID) > -1) { 
      args.model.selectedTemplates.pop(args.itemData.TemplateID); 
      args.itemElement[0].style.backgroundColor = ''; 
      args.itemElement[0].style.color = 'Black'; 

     } 
      //else Add 
     else { 
      args.model.selectedTemplates.push(args.itemData.TemplateID); 
      args.itemElement[0].style.backgroundColor = '#017AFF'; 
      args.itemElement[0].style.color = 'White'; 
     } 

    }, 

和视图:

<div data-options="dxView : { name: 'SelectSurveys', title: 'SelectSurveys' } "> 
    <div data-bind="dxCommand: { title: 'Save', id: 'create', action: saveSelections, icon: 'save' }"></div> 
    <div data-options="dxContent : { targetPlaceholder: 'content' } "> 
     <div data-bind="dxList: { dataSource: templateList, itemClickAction: selectTemplate }"> 
      <div data-options="dxTemplate : { name: 'item' } "> 
       <div style="font-weight: bold; padding-left: 10px;" data-bind="text: SurveyName"></div> 
      </div> 
     </div> 
    </div> 
</div> 

和循环选定的值保存到本地数据库:

$.each(args.model.selectedTemplates(), function (index, value) { 
    db.transaction(function (tx) { 
     console.log("Inserting Data"); 
     tx.executeSql(sql, [value], 
      function (t, result1) { 
       if (result1 != null) { 
        console.log("New Item added." + result1.insertId); 
       } 
      }, 
      function (t, error) { 
       console.log(error); 
      }); 
    }); 

在物体s,我已经添加了一些着色,因此您可以知道选择了哪些着色,它不使用dxSwitch或复选框,但它的工作原理也一样,我认为它更具视觉吸引力,并且对用户有帮助。