2013-10-11 177 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或複選框,但它的工作原理也一樣,我認爲它更具視覺吸引力,並且對用戶有幫助。