2017-04-20 64 views
0

我已經實施了一個滑動來顯示Oracle JET組件。滑動到顯示不起作用

下面是我的js代碼

this.action = ko.observable("No action taken yet"); 

    this.handleReady = function() 
    { 

     // register swipe to reveal for all new list items 
     $("#listview").find(".item-marker").each(function(index) 
     { 
      var item = $(this); 

      var id = item.prop("id"); 


      var startOffcanvas = item.find(".oj-offcanvas-start").first(); 
      var endOffcanvas = item.find(".oj-offcanvas-end").first();  

      // setup swipe actions    
      oj.SwipeToRevealUtils.setupSwipeActions(startOffcanvas); 
      oj.SwipeToRevealUtils.setupSwipeActions(endOffcanvas); 

      // make sure listener only registered once 
      endOffcanvas.off("ojdefaultaction"); 
      endOffcanvas.on("ojdefaultaction", function() 
      { 
       self.handleDefaultAction(item); 
      }); 
     }); 
    }; 

    this.handleDestroy = function() 
    { 
     // register swipe to reveal for all new list items 
     $("#listview").find(".item-marker").each(function(index) 
     { 
      var startOffcanvas = $(this).find(".oj-offcanvas-start").first();      
      var endOffcanvas = $(this).find(".oj-offcanvas-end").first();      

      oj.SwipeToRevealUtils.tearDownSwipeActions(startOffcanvas); 
      oj.SwipeToRevealUtils.tearDownSwipeActions(endOffcanvas); 
     }); 
    }; 

    this.handleMenuBeforeOpen = function(event, ui) 
    { 
     var target = event.originalEvent.target; 
     var context = $("#listview").ojListView("getContextByNode", target); 

     if (context != null) 
     { 
      self.currentItem = $("#"+context['key']); 
     } 
     else 
     { 
      self.currentItem = null; 
     } 
    }; 

    this.handleMenuItemSelect = function(event, ui) 
    { 
     var id = ui.item.prop("id"); 
     if (id == "read") 
      self.handleRead(); 
     else if (id == "more1" || id == "more2") 
      self.handleMore(); 
     else if (id == "tag") 
      self.handleFlag(); 
     else if (id == "delete") 
      self.handleTrash(); 
    }; 

    this.closeToolbar = function(which, item) 
    { 
     var toolbarId = "#"+which+"_toolbar_"+item.prop("id"); 
     var drawer = {"displayMode": "push", "selector": toolbarId}; 

     oj.OffcanvasUtils.close(drawer); 
    }; 

    this.handleAction = function(which, action, event) 
    { 
     if (event != null) 
     { 
      self.currentItem = $(event.target).closest(".item-marker"); 

      // offcanvas won't be open for default action case 
      if (action != "default") 
       self.closeToolbar(which, self.currentItem); 
     } 

     if (self.currentItem != null) 
      self.action("Handle "+action+" action on: "+self.currentItem.prop("id")); 
    }; 

    this.handleRead = function(data, event) 
    { 
     self.handleAction("first", "read", event); 
    }; 

    this.handleMore = function(data, event) 
    { 
     self.handleAction("second", "more", event); 
    }; 

    this.handleFlag = function(data, event) 
    { 
     self.handleAction("second", "Rejected", event); 
    }; 

    this.handleTrash = function(data, event) 
    { 
     self.handleAction("second", "Accepted", event); 
     self.remove(self.currentItem); 

    }; 

    this.handleDefaultAction = function(item) 
    { 
     self.currentItem = item; 
     self.handleAction("second", "default"); 
     self.remove(item); 
    }; 

    this.remove = function(item) 
    { 
     // unregister swipe to reveal for removed item 
     var startOffcanvas = item.find(".oj-offcanvas-start").first();      
     var endOffcanvas = item.find(".oj-offcanvas-end").first();      

     oj.SwipeToRevealUtils.tearDownSwipeActions(startOffcanvas); 
     oj.SwipeToRevealUtils.tearDownSwipeActions(endOffcanvas); 
    alert(JSON.stringify(self.allItems())); 

    alert(item.toString()); 
     self.allItems.remove(function(current) 
     { 
      return (current.id == item.prop("id")); 


     });    
    }; 
    } 
    return PeopleViewModel; 
    }); 

HTML代碼:

 <ul id="listview" 
     data-bind="ojComponent: {component: 'ojListView', 
     data: listViewDataSource, 
     item: {template: 'peoplelist_template'}, 
     selectionMode: 'single', 
     ready: handleReady, 
     destroy: handleDestroy, 
     optionChange: changeHandler, 
     rootAttributes: {style: 'width:100%;height:100vh;overflow:auto; margin-top: 5px'}, 
     scrollPolicy: 'loadMoreOnScroll', 
     scrollPolicyOptions: {fetchSize: 10}}"> 
    </ul> 

<script id="peoplelist_template"> 

 <div style="padding:0.8571rem"> 

     <div class="oj-flex oj-flex-items-pad"> 
       <div class="oj-flex-item oj-lg-4 oj-md-4"> 
        <img alt="employee image" class="demo-circular demo-employee-photo" style="float:left;" data-bind="attr: {src: $parent.getPhoto($data['name'])}"/> 
        <h2 class="demo-employee-name" data-bind="text: $data['from']"></h2> 
        <div class="demo-employee-title" data-bind="text: $data['title']"></div> 
        <div class="demo-employee-dept" data-bind="text: $data['deptName']"></div> 
       </div> 

        <div style="line-height: 1.5em; height: 3em; overflow: hidden; text-overflow: ellipsis" class="oj-text-sm oj-text-secondary-color" data-bind="text: $data['content']"></div> 

      </div> 
    </div> 
     <div tabIndex="-1" data-bind="attr: {id: 'first_toolbar_'+empId}" class="oj-offcanvas-start" style="width:75px"> 
      <div data-bind="click:$parent.handleRead"> 
       <div class="oj-flex-bar" style="height:100%"> 
        <div class="oj-flex-bar-center-absolute"> 
         <div class="oj-flex oj-sm-flex-direction-column"> 
          <div title=".demo-library-icon-24" role="img" class="oj-flex-item demo-library-icon-24 demo-icon-font-24"></div> 
          <div style="padding-top: 10px" class="oj-flex-item">Read</div> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 

     <div tabIndex="-1" data-bind="attr: {id: 'second_toolbar_'+empId}" class="oj-offcanvas-end" style="width:225px"> 
      <div class="oj-swipetoreveal-more" data-bind="click: $parent.handleMore"> 
       <div class="oj-flex-bar" style="height:100%"> 
        <div class="oj-flex-bar-center-absolute"> 
         <div class="oj-flex oj-sm-flex-direction-column"> 
          <div title=".demo-library-icon-24" role="img" class="oj-flex-item fa fa-bars"></div> 
          <div style="padding-top: 10px" class="oj-flex-item">More</div> 
         </div> 
        </div> 
       </div> 
      </div> 
      <div style="background-color:#b81900" data-bind="click:  $parent.handleFlag" class="oj-swipetoreveal-flag"> 
       <div class="oj-flex-bar" style="height:100%"> 
        <div class="oj-flex-bar-center-absolute"> 
         <div class="oj-flex oj-sm-flex-direction-column"> 
          <div title=".demo-library-icon-24" role="img" class="oj-flex-item fa fa-times"></div> 
          <div style="padding-top: 10px" class="oj-flex-item">Reject</div> 
         </div> 
        </div> 
       </div> 
      </div> 
      <div style="background-color:#009638" data-bind="click: $parent.handleTrash" class="oj-swipetoreveal-alert oj-swipetoreveal-default"> 
       <div class="oj-flex-bar" style="height:100%"> 
        <div class="oj-flex-bar-center-absolute"> 
         <div class="oj-flex oj-sm-flex-direction-column"> 
          <div title=".demo-library-icon-24" role="img" class="oj-flex-item fa fa-check"></div> 
          <div style="padding-top: 10px" class="oj-flex-item">Approve</div> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
     </div> 
    </div> 
    </li> 
</script> 

實際的問題是的listItem在批准是沒有得到刪除(在批准div是調用Handletrash函數)。

我不知道我去哪裏錯了?誰能幫我解決這個問題?

+0

有沒有什麼辦法可以做出更小的例子? –

+0

@RoyJ我現在已經貼出了我的滑動動作代碼。你能幫我嗎? – CodeWriter

+0

最好是添加一個jsfiddle –

回答

0

這裏有很多代碼,這使得很難理解什麼是一切都打算做,而更難確定問題可能是什麼。這就是爲什麼最好做一個Minimal, Complete, and Verifiable Example。此外,在刪除所有不直接影響問題的代碼的過程中,您可以自己解決。

我注意到你的代碼中有很多jQuery調用。這是一個重要的紅旗。您與Knockout的合同是您將操縱數據模型,Knockout將使用它來控制DOM。如果你「落後於Knockout的背後」並且自己操縱DOM,那麼你和Knockout將會彼此踩到腳趾。

Knockout爲您提供了兩種方法來定製它如何操作DOM:animated transitionscustom bindings。 「滑動以顯示」聽起來像是向我轉換的,但看着你的代碼,它似乎涉及整個生命週期,所以我認爲你需要製作一個自定義綁定處理程序。

所有的DOM操作代碼都應該在綁定處理程序中,並且它應該全部限制在綁定處理程序的element之內。不應該有文件範圍的選擇器。