일부 서버 데이터 (ViewBag)에서 녹아웃 관측 가능한 배열을 초기화하는 가장 좋은 방법을 찾고 있어요 배열 내용을 자바 스크립트 형식의 수 싶습니다. 정의했다. 나는 몇 가지 여분의 ViewModel 특정 속성을 가질 수 있고, 기능, 즉녹아웃 JS 자바 스크립트 형식을 사용하여 서버 데이터에서 관찰 가능한 배열을 초기화
materialVarieties: ko.observableArray(@Html.Raw(Json.Encode(ViewBag.Materials)))
그러나 나는 또한 내가 그렇게를 사용하고자하는 재료의 JS 유형이 :
var material = function(id, name) {
this.id = id;
this.name = name;
this.selected = ko.observable(false);
this.select = function()
{
jQuery.each(processViewModel.materials(), function(index, item)
{
item.selected(false);
});
this.selected(true);
}
}
JS 유형의 요구없이 그냥 사용할 수 있습니다
그리고는 필요한 초기화됩니다 :
이materialVarieties: ko.observableArray([new material(1, "Apricot"), .....
은 현재 내가 ViewBag 데이터에서 문자열을 구축하고 다음과 같이 초기화으로 그 렌더링 :
@{ var items = string.Join(",",
((IEnumerable<MaterialVariety>) ViewBag.Materials)
.Select(m => string.Format("new material({0}, {1})",
Json.Encode(m.Id), Json.Encode(m.Name)))); }
var processViewModel = {
material: ko.observableArray([@Html.Raw(items)])
string.Join
비트보다 깨끗한 방법이 있는지 궁금합니다. 나는 그것을 도우미에서 감쌀 수 있었다. 너 뭐하니?
왜 HtmlHelper 확장 방법을 만들지 않습니까? 일반적인 인수를 취하여 인코딩 된 출력을 반환합니다. – Anuj
@Anuj 그래, 내가 생각한 것 ('도우미에서 마무리 할 수있다')은 JS 유형을 나타내는 문자열을 가져야한다. 문제는 JS 생성자 (및 필요한 순서)에서 사용할 속성을 설정할 때 발생합니다. 속성을 가져 오기 위해 일반적인 인수를 반영 할 수 있지만 서버 측 모델 (다른 서버 측 VM을 필요로하지 않음)을 사용하고 JS에 필요하지 않은 다른 속성을 사용하고 싶습니다. 그리고 그것은 여전히 나에게 뭔가를 놓치지 않는 한 생성자 arg 명령의 문제를 남겨 둡니다. –