【问题标题】:amplifyjs unknown resourceIdamplifyjs 未知资源 ID
【发布时间】:2013-02-06 07:04:21
【问题描述】:

我正在尝试在我的 MVC4 应用程序中设置 amplifyjs。我正在尝试做一个返回 json 数据的简单服务器调用。我让它在我单独的示例项目中工作。

但现在我正在将相同的代码与我的真实应用程序集成。有以下代码。

      //sampleservice.js
      amplify.request.define("getSampleData", "ajax", {
          url: "/SampleData/GetSampleData",
          dataType: "json",
          type: "GET"    
      });

      function getSampleData(callbacks) {
            return amplify.request({
              resourceId: "getSampleData",
              success: callbacks.success,
               error: callbacks.error
            });
     };

这就是我试图在我的 Jquery.Ready 中使用它的方式。

    var list;
     $(document).ready(function () {

     list = ko.observableArray([]);
     ko.applyBindings($('#body'));
     getSampleData({
     success: function (data) {
        $(data).each(function (index, item) {
            list.push(item);
        });
    },
    error: function (response) {
        alert(response);
    }
});
 });

我可以看到我的 js 遇到了所有断点,但我遇到了以下 js 异常

    Uncaught amplify.request: unknown resourceId: getSampleData amplify.js:477
    amplify.request amplify.js:477
    getSampleData sampleservice.js:34
    (anonymous function) sampleviewmodel.js:9
    fire jquery-1.9.0.js:1017
    self.fireWith jquery-1.9.0.js:1127
    jQuery.extend.ready jquery-1.9.0.js:416
    DOMContentLoaded

我知道这是一个非常微不足道的问题,正如你所看到的,我只是 Js 编程的新手,我已经花了几个小时来解决这个问题,但还没有弄清楚任何事情。如果有人可以指导或至少有一些提示可以在这里为我调试它,那将有很大帮助。

【问题讨论】:

    标签: javascript jquery amplifyjs


    【解决方案1】:

    您似乎没有使用闭包,因此您的 Amplify 定义不可用。您将代码放在立即调用的函数表达式 (iife) 中,如下所示。这将运行您的放大定义代码并使getSampleData 可用作dataservice 对象的属性。所以你打电话给dataservice.getSampleData(...)

    var dataservice = (function(amplify) {
      var init = function() {
          amplify.request.define("getSampleData", "ajax", {
              url: "/SampleData/GetSampleData",
              dataType: "json",
              type: "GET"
          });
      },
    
      getSampleData = function (callbacks) {
        return amplify.request({
            resourceId: "getSampleData",
            success: callbacks.success,
            error: callbacks.error
        });
    };
    
    init();
    
    return {
        getSampleData: getSampleData
    };
    
    })(amplify);
    

    请注意,您对淘汰赛的使用也不正确。 ko.applyBindings 函数将视图模型作为第一个参数,将 DOM 元素作为可选的第二个参数。你的视图模型在哪里?

    【讨论】:

    • 我在JsFiddle 中提出了简单放大请求。 init(); 不错的收获...谢谢并为此 +1...
    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 2021-07-20
    相关资源
    最近更新 更多