2013-06-24 33 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