2013-04-18 4 views
0

모든 것을 따옴표로 묶어서 저장하고 양식에 인용 부호가없는 모든 것을 표시하려는 문제가 있습니다. 내 첫 번째 솔루션은 값을 위해이 작업을 수행하고 텍스트 작업을 수행하는 두 개의 여분의 바인딩 처리기를 만드는 것입니다. 잘 빠져 나간 이스케이프/언 이스케이프 된 Observable 작성하기

ko.bindingHandlers.escapedValue = { 
    init : function (element, valueAccessor, allBindingsAccessor) { 
     var $element = $(element), 
      contentObservable = valueAccessor(), 
      currentTxt = ko.utils.unwrapObservable(contentObservable); 

     if (currentTxt) { 
      $element.val(unescape(currentTxt)); 
     } 

     $element.change(function (e) { 
      contentObservable(escape($element.val())); 
     }); 
    } 
}; 

ko.bindingHandlers.escapedText = { 
    init : function (element, valueAccessor, allBindingsAccessor) { 
     var $element = $(element), 
      contentObservable = valueAccessor(), 
      currentTxt = ko.utils.unwrapObservable(contentObservable); 

     if (currentTxt) { 
      $element.text(unescape(currentTxt)); 
     } 

     contentObservable.subscribe(function (newValue) { 
      $element.text(unescape(newValue)); 
     }); 
    } 
}; 

그러나 내가 예를 들어 문자 길이의 값에 대한 몇 가지 유효성 검사를 수행 할 때이 인용 된 문자열의 길이를 확인) 1) 나는 아래로 키 후 더 이상이 라이브 업데이트를하지 않는 나에게 두 가지 문제를 준.

어떻게 내가 가까이 입수 가지고 ko.escapedObservable 같은 것을() 또는 ko.subscribable.fn.escaped()

을 쓸 수 있지만, 캔트 구원의 올바른을받을 것으로 보인다. 이제 제대로 표시하고 제대로 비교를 수행하지만 고토를 저장할 때 값은 여전히 ​​

ko.escapedObservable = function (initialValue) { 
    var observableVal = ko.observable(initialValue), 

    result = ko.computed({ 
     read: function() { 
      return unescape(observableVal()); 
     }, 
     write: function (newValue) { 
      return observableVal(escape(newValue)); 
     } 
    }); 

    this.toJSON = function() { 
     return escape(observableVal()); 
    }; 

    return result; 
}; 

==== 편집 ====을 unescped하는 텍스트를 탈출 // 두 개의 관찰 가능한 을 사용하고 Unescape가 솔루션 값

ko.escapedObservable = function (initialValue) { 
    var observableVal = ko.observable(initialValue), 

    result = ko.computed({ 
     read: function() { 
      return observableVal(); 
     }, 
     write: function (newValue) { 
      observableVal(newValue); 
     } 
    }); 

    result.unescaped = ko.computed({ 
     read: function() { 
      return unescape(observableVal()); 
     }, 
     write: function (newValue) { 
      observableVal(escape(newValue)); 
     } 
    }); 

    return result; 
}; 

답변

1
ko.escapedObservable = function (initialValue) { 
    var observableVal = ko.observable(initialValue), 

    result = ko.computed({ 
     read: function() { 
      return observableVal(); 
     }, 
     write: function (newValue) { 
      observableVal(newValue); 
     } 
    }); 

    result.unescaped = ko.computed({ 
     read: function() { 
      return unescape(observableVal()); 
     }, 
     write: function (newValue) { 
      observableVal(escape(newValue)); 
     } 
    }); 

    return result; 
}; 
0

정확히 무엇을 요구하고 있는지 파악하는 데 어려움이 있습니다. 그러나, 나는 당신이 정말로 단지 computed observable 필요 믿습니다 [Example]

function viewModel() { 
    this.test = ko.observable('\"Something\"'); 

    this.escapedTest = ko.computed(function() { 
     return escape(this.test()); 
    }, this); 

    this.unescapedTest = ko.computed(function() { 
     return unescape(this.escapedTest()); 
    }, this); 
} 
+0

1 개 필드에 좋은 곳입니다 참으로하지만,이 20, 30, 또는 속성의 이러한 유형의 알 수없는 양을 상상할가 많은 것 어디서나이를 수행 할 수있는 코드. 나는 어떻게 든 escapedObservable() 또는 뭔가를 호출 할 수 있습니다 어떤 녹아웃 관측 건너편 전역에이 작업을 수행 할 싶습니다. – BillPull