knockout.js에서 바인딩의 오른쪽 (바인딩 값)을 동적으로 설정할 수 있습니까? 예를 들어,knockout.js에서 동적 바인딩 값을 사용할 수 있습니까?
<input data-bind="value: dynamicBinding()"/>
<script type="text/javascript">
var vm = {
dynamicBinding : function() {
return "foo().bar";
},
foo : ko.observable({
bar : ko.observable("hi");
}
};
ko.applyBindings(vm);
</script>
결과 상기 dynamicBinding
함수 바인딩을인가하면서 실행하고, 생성 된 문자열 결합로서 사용되는 것일 것이다. 입력 요소는 foo().bar
으로 바인딩되어야하며,이 값은 "hi"값으로 관찰 가능합니다.
내가 왜 이것을 원할 수 있는지 궁금하다면 knockout을 사용하여 행과 열이 모두 observableArrays 인 동적 테이블을 렌더링하려고하는데 열 정의에 바인딩 표현식이 포함되도록하고 싶습니다. 그 열. 즉, 나는이 작업을 수행 할 수 있도록하려면 : 당신이 예에서 볼 수 있듯이
<table data-bind="foreach: data">
<tr data-bind="foreach: $root.columns">
<td data-bind="text: cellValueBinding()"></td>
</tr>
</table>
<script type="text/javascript">
var vm = {
data: ko.mapping.fromJS([
{title: "Brave New World", author: { name : "Aldous Huxley" },
{title: "1984", author: { name : "George Orwell" },
{title: "Pale Fire", author: { name : "Vladimir Nabokov" }]),
columns: ko.observableArray([
{header: "Title", cellValueBinding: function() { return "$parent.title"; }},
{header: "Author", cellValueBinding: function() { return "$parent.author().name"; }}
])
};
ko.applyBindings(vm);
</script>
는 열 정의는 데이터에서 값을 추출하는 방법을 알고있다. 테이블 마크 업 자체가 더 많거나 적은 자리 표시 자입니다. 그러나 내가 알 수있는 한, 이것이 녹아웃이 바인딩을 처리하는 방식 때문에 작동하지 않습니다. 다른 옵션도 있습니까?
감사합니다.
솔루션 : 나는 일리아의 제안을 사용하여 종료 - 나는 cellValueBinding가 인수로 행과 열을 받아들이고, 관찰을 반환하는 함수가 될 수 있도록 할 수 있습니다. 이 기술은 시연되었습니다 in this fiddle.
동적으로 실행하려면 _with /'eval'을 사용해야합니다. 거기에 아무것도 할 녹아웃에 내장되어 있습니다. –
글쎄, 대안을 환영합니다. :) 템플릿 (각 열은 자체 셀 템플릿을 정의 함)을 사용하여 꽤 쉽게 같은 것을 얻을 수 있다고 확신하지만, 너무 무거운 무게를 느낍니다. – waxwing
내 테이블 바인딩에 관심이있을 수 있습니다 : https://github.com/mbest/knockout-table –