2016-07-26 54 views
3

我有迪朗達爾插件和兩個syncfusion按鈕:迪朗達爾部件內功能範圍和背景

view.html

<div class="group-btn-container">    
    <input type="checkbox" data-bind="ejToggleButton: toggleButtonNo" /> 
    <input type="checkbox" data-bind="ejToggleButton: toggleButtonYes" /> 
</div> 

viewmodel.js

define(['knockout', 'jquery','web/ej.togglebutton.min', 'common/ej.widget.ko.min'], function (ko, $) { 

    var ctor = function() { }; 

    ctor.prototype.activate = function (settings) { 
     self = this; 

     var toggleBtnYes = {   
      toggleState: ko.observable(false), 
      click: function (args) { 
       self.toggleButtonNo.buttonOptions.toggleState(false); 
       args.model.toggleState(true); 
      } 
     } 
     self.toggleButtonYes = toggleBtnYes; 

     var toggleBtnNo = {   
      toggleState: ko.observable(true), 
      click: function (args) { 
       self.toggleButtonYes.buttonOptions.toggleState(false); 
       args.model.toggleState(true); 
      } 
     } 
     self.toggleButtonNo = toggleBtnNo; 
    }; 
    return ctor; 
}); 

兩個按鈕'是的「和」否「應該像單選按鈕一樣工作,當一個打開時,另一個應該關閉。問題1:我有一個viewodel上下文或範圍問題。 裏面的點擊功能我沒有看到'自我',實際上自己總是一些另外的部件,因爲在一個循環中我渲染了幾個部件,我不知道爲什麼自己不是我的功能ctor?

Q2:另外,當我想直接從點擊函數接近對象'toggleBtnNo'或'toggleBtnYes'時,它們沒有被定義。爲什麼我在內部'點擊'功能中看不到來自全局函數ctor的對象?

我只是不知道如何接近按鈕(在一個或其他方式)從我的點擊功能如何可以改變它的狀態?

回答

0

這是有史以來最糟糕的錯誤。我在看那百萬次,並沒有注意到。我很慚愧。

我沒有把'var'放在自我面前。

self = this; 

應該是:

var self = this; 

它引起的自我去在全球範圍內,每其他一些小部件覆蓋自我價值的時間。

0

從您提供的代碼片段看來,您似乎正在嘗試更新toggleButton的狀態將值分配給模型。由此,模型值被分配,並且在ToggleButton控件中未反映

相反,爲要更新的切換按鈕控制,則需要更新在可觀察到的可變(self.toggleButtonNo.toggleState)的值在模塊中並調用ko.applyBindings方法,使得模型值會更新了ToggleButton控件。

請參閱下面提供的代碼片段。

HTML

<input id="yes" type="checkbox" data-bind="ejToggleButton: {toggleState: toggleButtonYes.toggleState , defaultText: settings.defaultText, activeText: settings.activeText, click: toggleButtonYes.click}" /> 

<input id="no" type="checkbox" data-bind="ejToggleButton: {toggleState: toggleButtonNo.toggleState, defaultText: settings.defaultText, activeText: settings.activeText, click: toggleButtonNo.click}" /> 

腳本

define('mo1', ['knockout', 'jquery'], function (ko, $) { 

     return function() { 
      self = this; 
      self.settings = { 
       defaultText: "No", 
       activeText: "Yes", 
      }; 
      var toggleBtnYes = { 
       toggleState: ko.observable(true), 
       click: function (args) { 
        self.toggleButtonNo.toggleState(false); 
        self.toggleButtonYes.toggleState(true); 
        ko.applyBindings(self); 
       } 
      } 
      self.toggleButtonYes = toggleBtnYes; 

      var toggleBtnNo = { 

       toggleState: ko.observable(false), 
       click: function (args) { 
        self.toggleButtonYes.toggleState(false); 
        self.toggleButtonNo.toggleState(true); 
        ko.applyBindings(self); 
       } 
      } 
      self.toggleButtonNo = toggleBtnNo; 
     }; 
    }); 
+0

謝謝你的回答。你是對的我在淘汰賽中犯了錯誤,沒有做applyBindings。但是我的問題是,自我/這不是我自己的功能,那麼其​​他人仍然在這裏。我不確定,但那是Durandal問題。也許我沒有正確地構建'ctor'功能。在你的例子中,我也遇到了一個問題。 – Milos