2013-06-24 41 views
1

我想实现一个行为:当我从ComboBox中选择特定的模板在codemirror textarea中出现代码时。 请参阅我的小提琴: http://jsfiddle.net/GEJsu/1/Codemirror和Knockout之间的集成

function Template(initialTemplate) { 
     var self = this; 
     self.name = ko.observable(initialTemplate); 
     self.code = ko.computed({ 
      read: function() { 
       return self.name().Code; 
      }, 
      write: function (value) { 

      }, 
      owner: this 
     }); 
    } 

回答

0

我定你的代码。有很多无用的代码。所以请让我知道如果我删除了太多。

这是视图:

<select data-bind="options: availableTemplates, 
        value: selectedTemplate, 
        optionsText: 'Name'"></select> 
<br /> 
<div data-bind="with: selectedTemplate"> 
    <textarea cols="60" rows="8" style="background: lightblue" 
    data-bind="value: Code, 
       codemirror: { 'lineNumbers': true, 'mode': 'javascript' }"> 
    </textarea> 
</div> 

和视图模型:

// Overall viewmodel for this screen, along with initial state 
function ValidationViewModel() { 
    var self = this; 
    self.selectedTemplate = ko.observable(); 

    // Non-editable data - would come from the server 
    self.availableTemplates = [{ 
     Name: "Range Validation", 
     Code: "var minValue = 'A';\r\nvar maxValue = 'Z';\r\n\r\nreturn (e.value >= minValue && e.value <= maxValue) \r\n ? true \r\n : 'this is all wrong!';" 
    }, { 
     Name: "DateTime", 
     Code: "var newDate = new Date(e.value);\r\n\r\nif (newDate != 'Invalid Date')\r\n return true; \r\n\r\nreturn 'value is not a valid dateTime';" 
    }, { 
     Name: "Decimal", 
     Code: "if (e.value == null || e.value.length == 0)\r\n return 'please, type something'; \r\n\r\nreturn isFinite(e.value);" 
    }]; 


} 

See Fiddle

我希望它能帮助。

+0

对不起,我只是意识到我忘了加入小提琴。 请你能解释什么不工作(基于小提琴)。 – Damien

+0

所选模板中的代码已经出现在常见的textarea中,但我想代码已经出现在codemirror区域。 http://jsfiddle.net/6sd7f/3/如果我添加** ko.bindingHandlers.codemirror **它不能正常工作(代码没有出现在codemirror区域)。 http://jsfiddle.net/6sd7f/4/我做错了什么?对不起,愚蠢的问题,但我只是学习,并感谢你的快速答案。 – drets

+0

请看看这个小提琴: http://jsfiddle.net/UkHu6/1/ – Damien