2014-01-30 67 views
0

我一直在尋找,並沒有看到這個特定的場景解釋。我希望任何人都可以提供幫助!我正在使用knockoutjs和jQuery。我正嘗試在foreach綁定中使用點擊綁定將數據值傳遞給另一個viewmodel。我從click事件中檢索數據對象,但我不明白如何讀取該數據對象中的實際值,以便將其傳遞給第二個viewmodel。使用knockoutjs點擊綁定,我如何將一個viewmodel的值傳遞給另一個viewmodel?

這裏是從第1視圖模型我的HTML:

<div id="collapseOne" class="accordion-body collapse in" data-bind="foreach: { data: model.savingsAccounts, afterRender: changeOption }"> 
    <div class="accordion-inner" data-bind="css: getRow(), click: $parent.goToDetails"> 
     <span class="tableArrow">&nbsp;&nbsp;&nbsp;</span> 
     <span class="tableColumnLeft">Savings<br><span data-bind="text: $data.accountNum" /></span> 
     <span class="tableColumnCenter">$<span data-bind="text: $data.currentBalance" /></span><span class="tableColumnRight">></span> 
    </div> 
</div> 

我需要的「12345」的「$ data.accountNum」價值傳遞給第二個視圖模型時goToDetails評估。

下面是我在goToDetails,這是在我返回模塊定義:

goToDetails: function (data, event) { 
      var thisItem = koMapping.fromJSON(data.data); 
      alert(thisItem.accountNum); 
      details.currentAccountID = thisItem.accountNum; 
      shell.navigate('details', 'next'); 
     }, 

這裏是我的對象中的數據:

+ this 
+ arguments 
- data 
    accountNum  "12345" 
    accountType "Savings" 
    currentBalance "10.22" 
+ event 

警報顯示「不確定」的價值thisItem.accountNum。如何獲取accountNum的實際值?另外,在我導航之前,你是否都有更好的建議來將值傳遞給第二個viewmodel,而不是設置它?我不能使用查詢字符串。另外,我們沒有一個會議。

非常感謝您的時間!

加入我們整個viewmodel.js代碼的要求:

define(['knockout', 'knockout-mapping', 'jquery', 'viewmodels/shell', 'viewmodels/details'], function (ko, koMapping, $, shell, details) { 

    var self = this; 
    var savingsAccounts = ko.observableArray(); 

    self.activeOption = 'A'; 

    self.changeOption = function() { 
     if (self.activeOption == 'A') { 
      self.activeOption = 'B'; 
     } else { 
      self.activeOption = 'A'; 
     } 
    }; 

    self.getRow = function() { 
     if (self.activeOption == 'A') { 
      return 'balancesRowB'; 
     } else { 
      return 'balancesRowA'; 
     } 
    }; 

    function buildSavingsAccounts() { 
     savingsAccounts([ 
     { accountNum: '12345', accountType: 'Savings', currentBalance: '10.22' } 
    ]); 

    } 


    // module instance 
    return { 
     model: { 
      savingsAccounts: savingsAccounts 
     }, 
     activate: function (activationData) { 
      buildSavingsAccounts();   
     }, 
     goToDetails: function (data, event) { 
      var thisItem = koMapping.fromJSON(data.data); 
      alert(thisItem.accountNum); 
      details.currentAccountID = thisItem.accountNum; 
      shell.navigate('details', 'next'); 
     } 
    }; 
}); 
+0

你能粘貼你綁定javsacript代碼嗎? – seba47

+0

這是我們完整的viewmodel.js。請讓我知道,如果你想看到別的。 – user2847376

+1

我不確定你爲什麼使用ko.mapping插件。另外,你可能不應該使用'data.data'。如果你只是做console.log(data.accountNum);在goToDetails的第一行,它應該記錄accountNum值就好了。 –

回答

0

您必須元素,這兩個的ViewModels是綁你可以使用:

ko.contextFor(element); 

這會給你訪問另一個元素的視圖模型。在這種情況下,「元素」是實際的元素而不是jQuery選擇器。

相關問題