2013-10-20 50 views
1

我會盡量簡潔。我正在使用DurandalJs,HotTowel SPA模板。我已經添加了以下視圖模型Durandaljs和knockoutjs - 數據綁定不起作用

define(['services/logger'], function (logger) { 
    title = 'Content'; 
    unpublishedContent = ko.observable('default'); 

    activate = function() { 
     logger.log(title + ' View Activated', null, title, true); 
     return true; 
    } 

    unpublishedContent.subscribe(function (newValue) { 
     logger.log('New value is: ' + newValue); 
    }); 
    return { 
     activate: activate, 
     title: title, 
     unpublishedContent: unpublishedContent, 
     save: function (data) { 
      self = this; 
      logger.log(' Content saved - ' + self.unpublishedContent(), null, title, true); 
     } 
    }; 
}); 

而且下面的視圖

<section> 
    <div class="row"> 
     <div class="col-md-4">Left section</div> 
     <div class="col-md-8"> 
      <form class="form-horizontal" role="form" data-bind="submit: save"> 
       <div class="form-group"> 
        <label for="html" class="col-lg-3">Html</label> 
        <div class="col-lg-9"> 
         <textarea class="form-control" data-bind="text: unpublishedContent"></textarea> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label class="col-lg-3">Your HTML</label> 
        <label class="col-lg-9" data-bind="text: unpublishedContent"></label> 
       </div> 
       <div class="form-group"> 
        <div class="col-lg-offset-3 col-lg-9"> 
         <button type="submit" class="btn btn-default">Save</button> 
        </div> 
       </div> 

      </form> 
     </div> 
    </div> 
</section> 

幾點,這裏要注意

  1. unpublishedContent財產ko.observable
  2. unpublishedContent綁定到一個文本區域和標籤
  3. save方法勢必會形成使用submit結合

雖然我提交綁定工作,在unpublishedContent不工作的結合。我可能在某個地方犯了一個簡單的錯誤,但我無法發現,可能需要第二雙眼睛看着它。

我已經在durandal中啓用了調試功能,但是我沒有從durandal的日誌記錄中獲得很多信息,它沒有顯示與ko相關的任何內容,其次,我覺得我太新以至於無法理解它是調試消息。

回答

2

您在<textarea>上使用了錯誤的綁定(text)。你需要的是value綁定。

documentation

與您的視圖模型 屬性的value連接鍵關聯的DOM元素的值。這通常適用於等元素,例如<input>,<select><textarea>

所以更改檢視:

<textarea class="form-control" data-bind="value: unpublishedContent"></textarea> 
+0

奏效完美。任何想法我需要用來綁定一個'label'。我在上面的html中有一個標籤綁定到相同的屬性。當我輸入textarea時,我希望標籤能夠拾取textarea中的文本並顯示它。 – Suhas

+2

對於標籤,你仍然需要使用'text'綁定。但是如果你想立即更新,你需要在'value'綁定中使用'valueUpdate:'afterkeydown''選項:http://jsfiddle.net/fCa6y/ – nemesv