Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用sammy为路由设置可观测的淘汰_Javascript_Knockout.js_Single Page Application_Sammy.js - Fatal编程技术网

Javascript 使用sammy为路由设置可观测的淘汰

Javascript 使用sammy为路由设置可观测的淘汰,javascript,knockout.js,single-page-application,sammy.js,Javascript,Knockout.js,Single Page Application,Sammy.js,我有一个SPA,使用敲除JS进行数据绑定,使用sammy进行路由。我有一副牌,我正试图有一个动态路由到。我的问题是,当我试图从sammy中的路由函数中设置一个可观察的敲除时,它不起作用 我的HTML(我尝试在其中绑定组的名称)如下所示: <!-- Create Deck --> <div id="createDeck" class="page" style="display:none;"> <input type="text" class="fo

我有一个SPA,使用敲除JS进行数据绑定,使用sammy进行路由。我有一副牌,我正试图有一个动态路由到。我的问题是,当我试图从sammy中的路由函数中设置一个可观察的敲除时,它不起作用

我的HTML(我尝试在其中绑定组的名称)如下所示:

 <!-- Create Deck -->
 <div id="createDeck" class="page" style="display:none;">   
     <input type="text" class="form-control" placeholder="Untitled Deck..." data-bind="value: $root.deck.name" />
 </div>

<script type="text/javascript" src="lib/jquery-1.9.1.js"></script>
<script type="text/javascript" src="lib/knockout-2.3.0.js"></script>
<script type="text/javascript" src="lib/bootstrap.min.js"></script>
<script type="text/javascript" src="lib/sammy.js"></script>
<script type="text/javascript" src="js/Models/Deck.js"></script>
<script type="text/javascript" src="js/Models/Card.js"></script>
<script type="text/javascript" src="js/ViewModels/DeckViewModel.js"></script>
<script type="text/javascript" src="js/ViewModels/CardViewModel.js"></script>
<script type="text/javascript" src="js/routing.js"></script>
// Client-side routes    
(function ($) {

var app = $.sammy('#content', function () {

    this.get('#deck/:id', function (context) {
        showPage("createDeck", ": Create Deck");
        console.log(this.params.id);
        deckView.deck = new Deck(1, "test", null);
        console.log(deckView.deck);            
    });
});

$(function () {
    app.run('#/');
});

})(jQuery);

function showPage(pageID, subHeader) {
    // Hide all pages
    $(".page").hide();

    // Show the given page
    $("#" + pageID).show();

    // change the sub header
    $("#subHeader").text(subHeader);
}
最后,在我的布线中,我尝试创建一个新的甲板,如下所示:

 <!-- Create Deck -->
 <div id="createDeck" class="page" style="display:none;">   
     <input type="text" class="form-control" placeholder="Untitled Deck..." data-bind="value: $root.deck.name" />
 </div>

<script type="text/javascript" src="lib/jquery-1.9.1.js"></script>
<script type="text/javascript" src="lib/knockout-2.3.0.js"></script>
<script type="text/javascript" src="lib/bootstrap.min.js"></script>
<script type="text/javascript" src="lib/sammy.js"></script>
<script type="text/javascript" src="js/Models/Deck.js"></script>
<script type="text/javascript" src="js/Models/Card.js"></script>
<script type="text/javascript" src="js/ViewModels/DeckViewModel.js"></script>
<script type="text/javascript" src="js/ViewModels/CardViewModel.js"></script>
<script type="text/javascript" src="js/routing.js"></script>
// Client-side routes    
(function ($) {

var app = $.sammy('#content', function () {

    this.get('#deck/:id', function (context) {
        showPage("createDeck", ": Create Deck");
        console.log(this.params.id);
        deckView.deck = new Deck(1, "test", null);
        console.log(deckView.deck);            
    });
});

$(function () {
    app.run('#/');
});

})(jQuery);

function showPage(pageID, subHeader) {
    // Hide all pages
    $(".page").hide();

    // Show the given page
    $("#" + pageID).show();

    // change the sub header
    $("#subHeader").text(subHeader);
}
如您所见,我试图创建一个名为“test”的测试组,但是绑定似乎绑定了字母“c”

我不知所措,请帮忙


我试图解决我的问题,我以前的做法是在ViewModel中定义Sammy()路由。简短的示例:

(function($) {
    function ViewModel() {
        var self = this;

        self.deckId = ko.observable(null);

        Sammy(function() {
            this.get('#/deck/:deckId', function(context) {
                self.deckId(this.params.deckId);
            });
        });
    }

    $(function() {
        ko.applyBindings(new ViewModel());
    });
})(jQuery);

这样,您就可以通过self访问您的可观察对象等。

在您的代码中,除非您使用的是Knockout-es5插件,否则赋值是不正确的。这是正确的代码

var app = $.sammy('#content', function () {

    this.get('#deck/:id', function (context) {
        showPage("createDeck", ": Create Deck");
        console.log(this.params.id);
        deckView.deck(new Deck(1, "test", null));
        console.log(deckView.deck());            
    });
}); 

var元素=$('#createDeck')[0];应该是var元素=$(“#createDeck”);由于id选择器不返回数组。感谢您的输入。结果是一个语法错误。很高兴你找到了答案。