javascript
  • knockout.js
  • 2014-09-05 56 views 0 likes 
    0

    我有一個html 5視圖,並且想要執行拖放操作。在我的html中,我有一個淘汰賽,如下所示。元素正在被拖動。調用knockout js中定義的函數ViewModel

    <ul class="games-list" data-bind="foreach: games"> 
        <li data-bind="text: name, attr: { 'data-dragdrop': id }" 
         ondragstart='setTransferProperties(event)' 
         draggable="true"> 
        </li> 
    </ul> 
    

    ,這裏是與knockout ViewModel

    <script type="text/javascript"> 
    
        var AppScope = function() { 
    
         ...//plain js object here 
    
         //knockout js View Model 
         function PlayersViewModel() { 
          var self = this 
    
          self.games = ko.observableArray([ 
                  new Game({ id: 0, name: "Cricket" }), 
                  new Game({ id: 1, name: "Football" }), 
                  new Game({ id: 2, name: "Hockey" }) 
                  ]); 
          ... 
          //Drag and Drop 
          self.setTransferProperties = function (event) { //Not invoked 
           event.dataTransfer.setData("Text", event.target.getAttribute('data-dragdrop')); 
          }; 
         } 
        } 
    

    利用上述的setTransferProperties(事件)的JavaScript在另外,AppScope被尋找,替代knockout ViewModel內,因此未發現。

    當執行拖動操作時,如何調用在淘汰賽ViewModel中定義的setTransferProperties(event)

    +0

    我們可以知道哪裏是你的VIEWMODE遊戲觀察到的陣列? – 2014-09-05 06:02:28

    +0

    @G_S它在PlayersViewModel()裏面。我編輯了這個問題,並在代碼中顯示了它的定義。 – Jatin 2014-09-05 06:05:49

    +0

    我猜$ root.setTransferProperties(...)會適用於你,如果你正在應用綁定playersViewModel – 2014-09-05 06:05:53

    回答

    0

    你需要做以下

    <ul class="games-list" data-bind="foreach: games"> 
        <li data-bind="text: name, attr: { 
             'data-dragdrop': id , 
             'ondragstart':$parent.setTransferProperties 
         }" 
         draggable="true"> 
        </li> 
    </ul> 
    
    +0

    $父是否指遊戲?因爲你說$ parent.setTransfer ..... wouldnt它搜索遊戲對象中的方法?如果我錯了,請糾正我。 – 2014-09-05 06:31:51

    +0

    $ parent將引用'PlayersViewModel'並且'setTransferProperties'將是可訪問的。在循環中,'setTransferProperties'將把當前對象作爲參數。 'setTransferProperties'和'遊戲'是在同一水平,所以應該沒有問題 – 2014-09-05 06:38:03

    +0

    @G_S和raheel,我試過你的解決方案,但我不知道從哪裏得到一個奇怪的錯誤,其中說「Uncaught SyntaxError:意外的標記(「。我不知道爲什麼會出現這樣的錯誤,如果我使用瀏覽器控制檯查看它出現在哪一行,那麼它指向JavaScript的結尾標記。 – Jatin 2014-09-05 07:06:45

    相關問題