关于淘汰赛的问题

Posted

技术标签:

【中文标题】关于淘汰赛的问题【英文标题】:Questions about knockout 【发布时间】:2012-07-29 22:53:48 【问题描述】:

1.我有 2 个关于 asp.net 淘汰赛的问题。 服务器端方法:

<WebMethod>
Public Shared Function foo() As List(Of person)
    Return New List(Of person)() From New person With .id = 1, .fname = "meysam",
                                         New person With .id = 2, .fname = "yasaman".ToList
End Function

json 并绑定到淘汰赛:

var VM = ;
$.getJSON("default.aspx/foo", function (data) 
    var tmp = JSON.stringify(data.d);
    VM.model =  
    ko.applyBindings(VM);
);

html:

<div data-bind="foreach: model">
<h3 data-bind="text: id">
</h3>
<p>
    Name: <span data-bind="text: fname"></span>
</p>

但是当我在浏览器中运行时。不会有任何事情发生。fname,id 会显示出来。

2.$.getJSONdataType:json有什么区别?

 $.getJSON("default.aspx/foo", function (data) 
    var tmp = JSON.stringify(data.d);
);

$.ajax(
type:"post",
url:"default.aspx/foo",
contentType:"application/json;charset=utf-8",
dataType:"json",
success:function(data)
)

【问题讨论】:

【参考方案1】:

所以,这确实应该是两个实际问题,但是任何人(以相反的顺序!):

2:来自jQuery documentation:$.getJSON是一个简写Ajax函数,相当于:

$.ajax(
  url: url,
  dataType: 'json',
  data: data,
  success: callback
);

所以它们是一样的。

1:您尝试在getJSON 调用的结果上调用JSON.stringify() 是多余的。 getJSON 已经这样做了。问题有两个方面:这些解析器都不能解析 .net 列表(我可能对此有误,但我有 60% 的把握)。无论哪种情况,更好的解决方案是在 web 方法中将列表序列化为 JSON,并返回已解析的 JSON。 .NET 有this ability built-in。

第二,您的列表没有d 属性。所以即使你把那部分整理出来,你也会得到一个未定义的错误。

【讨论】:

【参考方案2】:

关于你的淘汰赛问题:

以下代码可解决您的问题:

输出

ASPX 代码后面

    [WebMethod]
    public static IEnumerable<KnoPerson> GetPeople()
    
        return Builder<KnoPerson>.CreateListOfSize(10).Build();
    

public class KnoPerson

    public int ID  get; set; 
    public int FirstName  get; set; 

ASPX

<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="Scripts/knockout-2.1.0.js"></script>
<script type="text/javascript" src="Scripts/knockout.mapping-latest.js"></script>
<script type="text/javascript">
    $(function () 
        var model = ;
        $.ajax(
            url: "KnockoutBindingFromPageMethod.aspx/GetPeople",
            data: null,
            type: "POST",
            dataType: "json",
            contentType: "application/json",
            cache: false,
            async: false,
            success: function (myData) 
                model.people = ko.mapping.fromJS(myData.d);
                model.yo = ko.observable("plop");
                ko.applyBindings(model);
            ,
            error: function (xhr) 
                alert(xhr.responseText);
            
        );
    );
</script>

    <div data-bind="text: yo"></div>
    <div data-bind="foreach: people">
        <h3 data-bind="text: ID"></h3>
        <p>
            Name: <span data-bind="text: FirstName"></span>
        </p>
    </div>

2.$.getJSON和dataType:json有什么区别?

.getJSON是快捷方式,内部使用.ajax

.getJSON 函数设置以下属性:

dataType: “json”

type: "GET"

【讨论】:

以上是关于关于淘汰赛的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于python的知识你了解多少?这六个知识你再不知道就淘汰啦!全都知道算我输

关于学习Linux的总结2

淘汰赛foreach绑定不起作用

在淘汰赛中解除视图模型与视图的绑定

Silverlight 4 - 锦标赛风格视图(淘汰赛,树)

关于OSI