2017-04-20 70 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之内。不应该有文件范围的选择器。