홈>
대상의 최소/최대 길이를 확인하는 익스텐더가 있습니다. 드롭 다운 선택에 따라 최소/최대를 동적으로 설정해야합니다. 최소값/최대 값이 범위를 벗어나면 관측 가능 값은
hasError
입니다.
, 그러면 CSS 클래스로 내 견해가 업데이트됩니다. 문제는 익스텐더를 리 바인드하면 뷰가 업데이트되지 않습니다. 여기 내 익스텐더가 있습니다 :
ko.extenders.minmaxlength = function (target, options) {
target.min = ko.observable(options.min);
target.max = ko.observable(options.max);
target.hasError = ko.observable(false);
function validate(newValue) {
if (newValue.length > options.max || newValue.length < options.min){
target.hasError(true);
} else {
target.hasError(false);
}
}
validate(target());
target.subscribe(validate);
};
여기서 바인딩 및 리 바인드 익스텐더를 리 바인드합니다 :
self.newValue = ko.observable('').extend({ minmaxlength: { min: 3, max: 30 } }); // defaults
self.selectedType.subscribe(function (newValue) {
if (newValue == undefined) {
return;
}
var obj = self.pricingTypes().filter(function (i) {
return i.Id == newValue;
});
if (obj.length > 0) {
var objType = obj[0];
self.selectedTypeObj(ko.mapping.fromJS(objType));
// rebind the extender here
self.newValue = ko.observable('').extend({ minmaxlength: { min: self.selectedTypeObj().MinLength(), max: self.selectedTypeObj().MaxLength() } });
self.newValue.valueHasMutated()
} else {
return; // bad value
}
});
디버그 할 때 익스텐더가 호출되고
hasError
를 설정하는 것을 볼 수 있습니다
제대로 작동하지만 다시보기가 업데이트되지 않습니다.
입력은 다음과 같습니다 :
<input class="form-control" data-bind="textInput: $root.newValue, css: { 'requiredField': $root.newValue.hasError() } "/>
- 답변 # 1
관련 자료
- c# - Blazor UI 구성 요소가 이벤트 삭제 후 업데이트되지 않는 이유는 무엇입니까?
- swift - @Binding을 사용할 때 텍스트가 업데이트되지 않는 이유는 무엇입니까?
- node.js - 노드, mongodb 응용 프로그램의 데이터를 업데이트하기 위해 $inc 연산자를 추가해도 날짜가 업데이트되지 않습니다
- laravel - 작곡가 업데이트 후 앱 작곡가가 존재하지 않습니다
- ionic framework - Android appflow 배포는 장치를 업데이트하지 않습니다
- javascript - '{}'유형에 'update'및 'quantity'특성이 없습니다
- c# - ASPNET MVC 5는 테이블 행을 업데이트하지 않고 세부 정보를 보냅니다 (데이터 테이블 포함)
- php - 어떤 경우에 Wordpress가 자동으로 업데이트되지 않습니까?
- Access - 접속하다 - 폼 또는 컨트롤 너비가 업데이트되지 않습니다
- android - 영역 리스너 콜백 내에서 setState가 호출 될 때 화면을 탭할 때까지 UI가 업데이트되지 않음
- python - RPC 호출로 자바 스크립트에서 변경하면 Odoo 필드가 업데이트되지 않습니다
- django - 편집은 데이터베이스를 업데이트하지 않습니다
- mongodb - 필드가 컬렉션에 존재하지 않는지 확인 및 업데이트
- javascript - 다음 js는 URL을 업데이트하지 않습니다
- firebase - 사용자를 수신하는 StreamProvider는 사용자가 변경 될 때 업데이트되지 않습니다
- javascript - ReactJS setState는 아무것도 업데이트하지 않습니다
- dictionary - flutter_map 플러그인이 현재 위치를 업데이트하지 않습니다
- ios - Swift Combine은 싱크로 값을 업데이트하지 않습니다
- sql : 긴 쿼리의 일부인 경우 업데이트가 작동하지 않습니다.
- c# - Update ()가 text를 설정하지 않는 이유는 무엇입니까?
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
런타임에 KO 익스텐더의 값을 변경할 수 있다고 생각하지 않습니다. 그러나 전에는 그런 적이 없었으므로 익스텐더에 옵저버 블을 전달한 다음
.subscribe()
에서 옵저버 블 값을 변경하려고했습니다. 콜백이지만 운은 없습니다.대신 계산을 사용하는 것이 좋습니다. 보기 모델에 필요한 모든 값에 액세스 할 수있는 것 같습니다.