2

jQuery関数でビューモデル関数を呼び出す方法は? Javascript関数からviewmodel関数の関数を呼び出したいだけです。

function ContactsViewModel(data) {
  var self = this;
  // Editable data
  self.Contacts = ko.observableArray(JSON.parse(data));
  self.limit = ko.observable(20);
  self.changeNumber = function(item){
    self.limit(self.limit()+20);
    self.Contacts.push(item);
  }
  self.myPostProcessingLogic = function(elements) {
    if ($('#KnockOutContacts').children().length === ko.toJS(self.Contacts).length) {
      // Only now execute handler
      jq();
    }
  }
}

ペイン関数changeNumberから呼び出す方法は?jscroll

$('.jspScrollable').bind(
  'jsp-arrow-change',
  function(event, isAtTop, isAtBottom, isAtLeft, isAtRight) {
    // Now look at the is* parameters and do what you
    // need to do. All four of the is* parameters are booleans.
    if(isAtBottom) {
      ContactsViewModel.changeNumber();
    }
  }
);

データはサーバーから来ています

function returnData(url,data,type){
    $.post(url, data, function(returnedData) {

    if(type == "contacts")
    {   
    ko.applyBindings(new ContactsViewModel(returnedData),$("#KnockOutContacts")[0]);    
    }
    else if(type == "logs")
    {
    ko.applyBindings(new LogsViewModel(returnedData),$("#KnockOutLogs")[0]);    
    }
    else if(type == "sms")
    {
        ko.applyBindings(new SmsViewModel(returnedData,"#KnockOutSms"),$("#KnockOutSms")[0]);   
    ko.applyBindings(new SmsViewModel(returnedData,"#KnockOutSmsData"),$("#KnockOutSmsData")[0]);   


    }
});
}

前もって感謝します。

4

3 に答える 3

1

カスタム バインディングの使用について Anders に同意します。ただし、どうしてもやりたい場合は、ContactsViewModel から「self」を返してみてください (以下の例を参照)。

function ContactsViewModel(data) {
  var self = this;
  // Editable data
  self.Contacts = ko.observableArray(JSON.parse(data));
  self.limit = ko.observable(20);
  self.changeNumber = function(item){
    self.limit(self.limit()+20);
    self.Contacts.push(item);
  }
  self.myPostProcessingLogic = function(elements) {
    if ($('#KnockOutContacts').children().length === ko.toJS(self.Contacts).length) {
      // Only now execute handler
      jq();
    }
  }

  //return self
  return self;

}

//Variable you'll use to reference in jQuery
var myVm = ContactsViewModel(yourdata);
ko.applyBindings(myVm);

myVm.changeNumber(yourItem);
于 2013-01-16T04:29:06.303 に答える
0

次のようなことができます:


ビューモデル

var searchViewModel = function () {
    var self = this;

    self.search = function (param) {
        //do something
    };
}

HTML

<button data-bind="click: function () { Search() }" class="" id="searchBtn">Search</button>

Jクエリ

function Search() {
    // paramvalue = 1; 
    viewModel.search(paramvalue);                  
}
于 2015-04-21T09:15:23.083 に答える
0

jQuery を接続するカスタム バインディングを作成します。ビューモデルにDOM関連のコードを含めないでください。これはアンチパターンです。

のようなもの (動作しないコード)

ko.bindingHandlers.scrollable = {
   init: function(element, valueAccessor) {
      var onScroll = valueAccessor();
      $(element).bind(
        'jsp-arrow-change',
        function(event, isAtTop, isAtBottom, isAtLeft, isAtRight) {
        // Now look at the is* parameters and do what you
        // need to do. All four of the is* parameters are booleans.
        if(isAtBottom) {
           onScroll();
        }
      });
   }
};

次に、次のようにビューから使用されます

<div data-bind="scrollable: changeNumber"></div>
于 2013-01-15T11:44:58.080 に答える