저는 KnockoutJs에 매우 익숙합니다. 그래서 나는 이런 종류의 상황에 대해 잘 알려지지 않은 모범 사례가 있다는 것을 기대하고 있습니다.글로벌 viewModel없이 클릭 핸들러를 knockoutjs의 템플릿에 바인딩하는 방법은 무엇입니까?
항목 배열이 포함 된보기 모델이 있습니다. 템플릿을 사용하여 이러한 항목을 표시하려고합니다. 또한 각 항목에보기 모드와 편집 모드를 전환 할 수 있기를 바랍니다. Knockout에 가장 잘 맞는 것은 배열의 각 항목에 대한 기본 뷰 모델 또는 (아마도 더 나은) 관련 함수를 만든 다음이 함수를 템플릿에 바인딩하는 것입니다. 그래서 난 내 페이지에이 코드를 만들었습니다
<ul data-bind="template: {name: testTemplate, foreach: items}"></ul>
<script id="testTemplate" type="text/x-jquery-tmpl">
<li>
<img src="icon.png" data-bind="click: displayEditView" />
<span data-bind="text: GBPAmount"></span>
<input type="text" data-bind="value: GBPAmount" />
</li>
</script>
<script>
(function() {
var viewModel = new TestViewModel(myItems);
ko.applyBindings(viewModel);
})();
</script>
그리고이 별도의 파일 :
function TestViewModel(itemsJson) {
this.items = ko.mapping.fromJS(itemsJson);
for(i = 0; i < this.items.length; ++i) {
this.items[i].displayEditView = function() {
alert("payment function called");
}
}
this.displayEditView = function() {
alert("viewmodel function called");
}
};
때문에 내 JS 글로벌 네임 스페이스에 아무것도를 추가 할 수 없습니다 I에서 실행되는 환경에 따라서보기 모델을 만들고 설정하는 익명 함수. (필요한 경우 추가 할 수있는 네임 스페이스가 있습니다.)이 제한 사항은 글로벌 viewModel 변수에 의존하는 것으로 보이는 모든 예제를 손상시키는 것으로 보입니다.
P. 만약 내가하려고하는 것보다 knockoutJS에 더 잘 맞는 접근법이 있다면 그것을 제안 해주십시오!
감사합니다. 매우 도움이됩니다. – Dan