2013-03-26 95 views
1

我与Knockout.js玩耍,创造这个简单的例子:http://jsfiddle.net/JcTxT/30/为什么这个简单的Knockout.js示例不起作用?

<div id="term_grp" data-role="fieldcontain"><a>Semester:</a> 

<fieldset id="term_fields" data-role="controlgroup" data-type="horizontal"> 
    <input type="radio" name="term" id="ss" value="ss" data-bind="checked: term" /> 
    <label for="ss">Sommersemester</label> 
    <input type="radio" name="term" id="ws" value="ws" data-bind="checked: term" /> 
    <label for="ws">Wintersemester</label> 
</fieldset> 
Term is <span data-bind="text: pommes"></span> 

var aResult = { 
    term: ko.observable("ss"), 
    pommes: "TEST" 
}; 

$(document).on('pagebeforeshow', '#mainPage', function() { 
    ko.applyBindings(aResult); 
}); 

我预期的单选按钮中的一个来进行检查(带有值“SS”但这种情况并非如此有谁知道,为什么

干杯

+1

jQuery Mobile的是你的问题的根源。它改变了可以搞乱绑定的dom。你单选按钮是绑定的,但jQuery Mobile隐藏它并插入一个未绑定的div和span。 – 2013-03-26 13:03:07

+0

好的,他们的绑定框架是否与jQUery Mobile保持一致? – AntonSack 2013-03-26 13:16:08

回答

2

确定,需要做什么呢?

添加另一个事件处理程序,并把它添加到绑定:

var aResult = { 
    term: ko.observable("ws"), 
    pommes: "TEST2" 
}; 

ko.bindingHandlers.mobileradio = { 
    init: function (element, valueAccessor) {}, 
    update: function (element, valueAccessor) { 
     var value = valueAccessor(); 
     var valueUnwrapped = ko.utils.unwrapObservable(value); 
     if (valueUnwrapped == $(element).val()) { 
      $(element).prop("checked", "true").checkboxradio("refresh"); 
     } else { 
      $(element).removeProp("checked").checkboxradio("refresh"); 
     } 
    } 
}; 

$(function() { 
    ko.applyBindings(aResult); 
}); 

工作小提琴:http://jsfiddle.net/JcTxT/35/

5

它的工作原理,如果你使用:? $(function() { ko.applyBindings(aResult); }); 并关闭jQuery的手机。

我在你的jsfiddle中试过。

如果你需要jQuery Mobile的,此链接: http://www.codesizzle.com/jquery-mobile-radio-with-knockout-js/

+0

好的,但我需要jQuery Mobile .... :( – AntonSack 2013-03-26 13:12:52

+1

添加了关于jquery mobile的笔记 – Vladimir 2013-03-26 13:20:42

+0

Vlad,非常感谢!;-) – AntonSack 2013-03-26 13:27:13

相关问题