滑动到显示不起作用

时间:2017-04-20 13:11:22

标签: html5 knockout.js oracle-jet

我已实现了一次滑动以显示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 code:

       <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。(Approve div调用Handletrash函数)。

我不知道我哪里出错了?谁能帮我解决这个问题?

1 个答案:

答案 0 :(得分:0)

这里有很多代码,这使得很难理解一切都打算做什么,并且更难确定问题可能是什么。这就是为什么最好制作一个Minimal, Complete, and Verifiable Example。此外,在删除所有不会直接影响您的问题的代码的过程中,您可以自己解决。

我在你的代码中注意到你有很多jQuery调用。那是一个重要的红旗。您与Knockout的合同是您将操纵您的数据模型,Knockout将使用它来控制DOM。如果你“落后于Knockout的背部”并自己操纵DOM,你和Knockout将会踩到彼此的脚趾。

Knockout提供了两种方法来自定义操作DOM的方式:animated transitionscustom bindings。 “滑动以显示”声音就像过渡到我,但看着你的代码,它似乎涉及整个生命周期,所以我认为你需要制作一个自定义绑定处理程序。

所有DOM操作代码都应该在绑定处理程序中,并且所有这些代码都应该限制在绑定处理程序的element内。应该没有文档范围的选择器。