gpt4 book ai didi

javascript - 在javascript中声明可观察到的动态 knockout

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:42:39 25 4
gpt4 key购买 nike

我正在使用 asp.net mvc 实现 knockout ,我在 asp.net mvc 中有一个 View 模型。我有一个基于 asp.net mvc View 模型中每个类的属性名称的值使用服务器端生成的数组列表。例如:Array[] propertyName = { name1, name2, name3 }。现在我需要使所有这些属性名称都可观察,如下所示。我可以在 javascript 中逐一键入它,但问题是它应该根据 asp.net mvc 中定义的 View 模型中可用的属性是动态的。现在我硬编码 name1, name2, name3 buy 我不知道如何根据从服务器返回的数组使其动态化。

<script>
function TestViewModel() {
var self = this;
self.name1 = ko.observable('@name1') //from view model (need to be dynamic)
self.name2 = ko.observable('@name2') //from view model (need to be dynamic)
self.name3 = ko.observable('@name3') //from view model (need to be dynamic)

self.btn1 = ko.observable(false); //hardcoded base on html
self.btn2 = ko.observable(true); //hardcoded base on html
}

ko.applyBindings(new TestViewModel());
</script>


// What i expect
<script>
function TestViewModel() {
var self = this;
Array[] propertyName = { name1, name2, name3 } // value retrieve from server
@foreach(var item in propertyName) {
// and knockout js can run this
self.@propertyName = ko.observable(@propertyName)
}

self.btn1 = ko.observable(false); //hardcoded base on html
self.btn2 = ko.observable(true); //hardcoded base on html
}

ko.applyBindings(new TestViewModel());
</script>

// fail because self.@propertyName
self.@propertyName = ko.observable(@propertyName)
= expected identifer
ko expected;

最佳答案

您可以使用 ko.mapping用于根据模型属性创建 ko.observables 的插件。所以假设,如果您有一个传递给 Razor View 的以下模型

 public class PersonVM
{
public int Id { get; set; }
public String Name { get; set; }
public String Address { get; set; }
}

然后您可以将模型序列化为 json 对象并传递给您的 TestViewModel 函数,并使用 ko.mapping.fromJs(data,{},this) 将 C# 模型属性映射到您的客户端 knockout View 模型可观察对象。

<script type="text/javascript">
function TestViewModel(data) {
var self = this;
ko.mapping.fromJS(data, {}, this);
self.btn1 = ko.observable(false); //hardcoded base on html
self.btn2 = ko.observable(true); //hardcoded base on html
}

var jsonEncodedModel = @Html.Raw(JsonConvert.SerializeObject(Model));
ko.applyBindings(new TestViewModel(jsonEncodedModel));

</script>

然后您的模型属性 Id、Name、Address 将在您的 TestViewModel 中创建为可观察对象。

关于javascript - 在javascript中声明可观察到的动态 knockout ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32135727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com