1

인터넷 탐색기에서만 발생하는 이상한 문제가 있습니다. 이 기능은 Firefox와 Chrome에서 작동합니다. 버그는 녹아웃 2.2.1 및 녹아웃 3.1.0에서 재현 할 수 있습니다.녹아웃 : 인터넷 탐색기에서 모델이 업데이트되지 않았습니다.

두 번 클릭하면 텍스트 상자로 변경됩니다. 여기

<div> 
    <span class="dataSourceSpan">@resourceManager.GetString("STR_DATABASE_SCHEMA_NAME"):</span> 
    <div class="SchemasBloc"> 
     <ul class="Schemas" data-bind="sortable: { data: SchemaList, afterMove: UpdateDatabaseSchemaNameFromList }, visible: SchemaList().length > 0 "> 
      <li class="SchemaList" data-bind="css: { selected: $data == $parent.SelectedSchema() }, click: $parent.SetSelectedSchema"> 
       <span class="labelText" data-bind="text: Description, visible: !isEditing(), event: { dblclick: startEdit }"></span> 
       <input class="SchemaInput" data-bind="value: Description, visible: isEditing(), hasFocus: isEditing(), event: { keyup: endEditEnter, blur: endEdit }" /> 
       <a class="k-button" title="@resourceManager.GetString("STR_REMOVE_SCHEMA")" data-bind="click: $parent.removeSelectedSchema"><span class="k-icon k-i-close"></span></a> 
      </li> 
     </ul> 
     <span class="addSchema"> 
      <a class="k-button" data-bind="click: AddSchema" title="@resourceManager.GetString("STR_ADD_SCHEMA")"><span class="k-icon k-i-plus"></span></a> 
     </span> 
    </div> 
</div> 

를 자바 스크립트입니다 :

다음은 HTML의 IE의 문제가 endEdit() 기능 self.Description()

var ShemaModel = function (description, IsNew) { 
    var self = this; 

    self.Description = ko.observable(description); 
    self.IsNew = ko.observable(IsNew); 

    self.isEditing = ko.observable(false); 
    self.TemporaryEnvironmentDescription = ko.observable(false); 


    self.startEdit = function (model, event) { 
     self.isEditing(true); 
     self.TemporaryEnvironmentDescription(self.Description()); 
     $(".Schemas .selected").children("input").focus(); 
    }; 

    self.endEdit = function (model, event) { 
     if (self.Description() !== self.TemporaryEnvironmentDescription() && self.Description() !== "" && self.isEditing()) { 
      self.TemporaryEnvironmentDescription(self.Description()); 
     } 
     else if (self.IsNew() && self.isEditing()) { 
      //remove the added schema 
      environmentModel.SelectedEnvironment().SelectedDataSource().SchemaList.remove(environmentModel.SelectedEnvironment().SelectedDataSource().SelectedSchema()); 
     } 
     environmentModel.SelectedEnvironment().SelectedDataSource().UpdateDatabaseSchemaNameFromList(); 
     self.isEditing(false); 
     self.IsNew(false); 
    }; 

    self.endEditEnter = function (Model, event) { 
     event.keyCode === 13 && self.endEdit(Model, event); 
    }; 
}; 

항상 빈 문자열을 반환합니다. 모델이 업데이트되지 않았습니다. 수정하기 전에 span 텍스트 값을 임시 값에 저장합니다. 이벤트 endedit이 발생하면 임시 값과 현재 값을 비교합니다. 서로 다른 경우 모델을 업데이트합니다.

입력 버튼을 누르면 모델이 업데이트되지 않습니다 (keyUp 이벤트가 제대로 작동하지 않음). blur 이벤트가 정상적으로 작동합니다. 방아쇠를 당기지 않은 입력 이벤트와 관련이 있는지 여부는 알 수 없습니다.

나는 블러 이벤트를 강제로 시도했지만 내 논리를 엉망으로 만들었습니다.

아이디어가 있으십니까?

+0

당신이 오류에을받지되는지 확인 했 콘솔? –

+0

콘솔에 오류가 전혀 없습니다. 제 생각에는 IE와 관련이있어 이벤트를 트리거하지 않는 것입니다. 아마도 knockout의 모델은 해당 이벤트가 트리거 된 경우에만 업데이트됩니다 ... – billybob

+1

문제를 재현하는 SO 미리보기 또는 바이올린을 함께 넣을 수 있습니까? – JohnnyHK

답변

2

시도 valueUpdate 추가 : 키 릴리스에 대한 관찰 설명의 값을 업데이트 할 바인딩 강제

<input class="SchemaInput" data-bind="value: Description, visible: isEditing(), hasFocus: isEditing(), event: { keyup: endEditEnter, blur: endEdit }" /> 

이에 '의 keyup'

관련 문제